我有一个非常具体的主题文件(例如体育/无神论者)。在该语料库中,我想自己定义同义词。我想自己定义同义词的原因是因为有时候,给定两个单词,synonyms()
包中的WordNet
函数可能无法将它们识别为同义词,但在文本中它们可能是如此解释(例如," fit"和#34; strong")。
我的想法是使用与Bygrams和Trigrams的单词关联,并在单词频繁出现在短语中并具有相似的语义内容时定义同义词。例如,使用crude
包中的tm
数据集,我会做类似的事情:
data(crude)
options(mc.cores=1)
BigramTokenizer <- function(x) NGramTokenizer(x, Weka_control(min = 2, max = 2))
crudetdm <- TermDocumentMatrix(crude, control=list(stripWhitespace = TRUE,
removePunctuation = TRUE,
removeNumbers = TRUE,
stopwords = TRUE,
removeSparseTerms = TRUE,
tokenize = BigramTokenizer))
ListAssoc <- lapply(crudetdm$dimnames$Terms, function(x) findAssocs(crudetdm, x, 0.9))
然而,这会返回(如预期)与Bigrams相关的Bigrams,而我的想法是找到与bigtdms $ Dimnames $ Terms中的Bigrams相关联的个人字词(与Trigrams相同的例外情况将是下一步)。例如,使用Bygrams和crude
数据集,理想情况将最终得到一个data.frame,如:
Bigram Associated Words
oil companies policies, marketing, prices, measures, market, revenue...
然后我会自己走进桌子并手动选择那些我认为可以在我的数据集中被视为同义词的单词(我的数据集不是那么大)。通过定义bigrams和trigrams的多个data.frames并匹配常用词,我可以想到一些方法。但是,我确信在R中有更优雅和有效的方法。
总的来说,我的问题是。鉴于一系列的Bigrams和Trigrams,我怎样才能找到与他们相关的个别单词?