Troubles with NLTK bigram finder
我有一个标有"all.txt"的文本文件,它包含一个普通的英文段落
由于某种原因,当我运行此代码时:
1 2 3 4 5 6 7 8 9 10 11 12 13 | import nltk from nltk.collocations import * bigram_measures = nltk.collocations.BigramAssocMeasures() trigram_measures = nltk.collocations.TrigramAssocMeasures() # change this to read in your data finder = BigramCollocationFinder.from_words(('all.txt')) # only bigrams that appear 3+ times #finder.apply_freq_filter(3) # return the 10 n-grams with the highest PMI print finder.nbest(bigram_measures.pmi, 10) |
我得到以下结果:
1 | [('.', 't'), ('a', 'l'), ('l', '.'), ('t', 'x'), ('x', 't')] |
我做错了什么,因为我只收到信件?我要找的是单词而不是字母!
以下是 "all.txt" 中内容的示例,因此您可以了解正在处理的内容:
"而且反对这个计划的不只是民主党人。全国各地的美国人都表达了他们对这个计划的反对。我和我的民主同事有一个更好的计划,将加强道德规则,以改善国会的问责制并确保该立法得到了适当的考虑。共和党计划未能填补允许在成员阅读之前考虑立法的漏洞。"
第一个问题是您实际上并没有读取文件,您只是将包含文件路径的字符串传递给函数,第二个问题是您首先需要使用标记器。解决第二个问题:
1 2 3 | from nltk.tokenize import word_tokenize finder = BigramCollocationFinder.from_words(word_tokenize("This is a test sentence")) print finder.nbest(bigram_measures.pmi, 10) |
产量
请注意,您可能想要使用不同的标记器——标记包文档将详细解释各种选项。
在第一种情况下,您可以使用类似:
1 2 | with open('all.txt', 'r') as data_file: finder = BigramCollocationFinder.from_words(word_tokenize(data_file.read()) |