Я начинаю с пакета tm в R, поэтому, пожалуйста, несите меня и извиняйтесь за большую стену текста. Я создал довольно большой корпус социалистической/коммунистической пропаганды и хотел бы извлечь недавно придуманные политические термины (несколько слов, например, «борьба-критика-трансформация»).Поиск ngrams в R и сравнение ngrams через тела
Это двухэтапный вопрос, касающийся моего кода, и один, касающийся того, как я должен продолжать.
Шаг 1: Для этого я хотел сначала определить некоторые распространенные ngrams. Но я застрял очень рано. Вот что я делаю:
library(tm)
library(RWeka)
a <-Corpus(DirSource("/mycorpora/1965"), readerControl = list(language="lat")) # that dir is full of txt files
summary(a)
a <- tm_map(a, removeNumbers)
a <- tm_map(a, removePunctuation)
a <- tm_map(a , stripWhitespace)
a <- tm_map(a, tolower)
a <- tm_map(a, removeWords, stopwords("english"))
a <- tm_map(a, stemDocument, language = "english")
# everything works fine so far, so I start playing around with what I have
adtm <-DocumentTermMatrix(a)
adtm <- removeSparseTerms(adtm, 0.75)
inspect(adtm)
findFreqTerms(adtm, lowfreq=10) # find terms with a frequency higher than 10
findAssocs(adtm, "usa",.5) # just looking for some associations
findAssocs(adtm, "china",.5)
# ... and so on, and so forth, all of this works fine
Корпус загружаю в R отлично с большинством функций я бросаю на него работает. У меня не было никаких проблем с созданием TDM из моего корпуса, поиска частых слов, ассоциаций, создания облаков слов и т. Д. Но когда я пытаюсь использовать идентифицировать ngrams, используя подход, изложенный в tm FAQ, я, видимо, делает какую-то ошибку с ТДМ-конструктор:
# Trigram
TrigramTokenizer <- function(x) NGramTokenizer(x,
Weka_control(min = 3, max = 3))
tdm <- TermDocumentMatrix(a, control = list(tokenize = TrigramTokenizer))
inspect(tdm)
я получаю сообщение об ошибке:
Error in rep(seq_along(x), sapply(tflist, length)) :
invalid 'times' argument
In addition: Warning message:
In is.na(x) : is.na() applied to non-(list or vector) of type 'NULL'
Любой идеи? Является ли «а» не правильным классом/объектом? Я смущен. Я предполагаю, что здесь есть фундаментальная ошибка, но я этого не вижу. :(
Шаг 2: Тогда я хотел бы определить ngrams, которые значительно чаще, когда я сравниваю корпус против других корпусов Например, я мог бы сравнить мой корпус против большого стандартного английского корпуса или создать подмножества.. что я могу сравнивать друг с другом (например, советская и китайская коммунистическая терминология). У вас есть какие-то предложения о том, как я должен это делать? Любые скрипты/функции, которые я должен изучить? Просто некоторые идеи или указатели были бы замечательными.
Благодарим за ваше терпение
У меня была такая же ошибка, для меня это сработало, когда я установил минимальное значение, отличное от max в управлении Weka ... Не знаю, если это вариант для вас .... – holzben
Спасибо за ваш совет! Однако для меня это не работало. Сообщение об ошибке остается неизменным при изменении значений min/max. –
На всякий случай люди когда-либо находят это или интересуются: я на самом деле не решил первую проблему, но мне удалось обойти ее, используя аналогичную функцию, предоставляемую пакетом ** RTextTools **: 'matrix <- create_matrix (corpus , ngramLength = 3) ' –