使用NLTK计算Python中的短语

时间:2016-09-25 21:03:28

标签: python nltk word-count phrase

我试图从文本文件中获取一个短语计数但到目前为止我只能获得一个单词计数(见下文)。我需要扩展这个逻辑来计算双字短语出现在文本文件中的次数。

根据我的理解,可以使用来自NLTK的逻辑来定义/分组短语。我相信收集功能是我获得所需结果所需的功能,但我不确定如何通过阅读NLTK文档来实现它。任何提示/帮助将不胜感激。

import re
import string
frequency = {}
document_text = open('Words.txt', 'r')
text_string = document_text.read().lower()
match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string)

for word in match_pattern:
    count = frequency.get(word,0)
    frequency[word] = count + 1

frequency_list = frequency.keys()

for words in frequency_list:
    print (words, frequency[words])

2 个答案:

答案 0 :(得分:0)

您可以使用collocations模块获取所有两个单词短语。此工具可识别经常在语料库中连续出现的单词。

要找到两个单词短语,您需要先在其他单词的上下文中计算单词的频率及其外观。 NLTK有一个BigramCollocationFinder类可以做到这一点。以下是我们如何找到Bigram搭配的方法:

import re
import string
import nltk
from nltk.tokenize import word_tokenize, sent_tokenize
from nltk.collocations import BigramCollocationFinder, BigramAssocMeasures

frequency = {}
document_text = open('Words.txt', 'r')
text_string = document_text.read().lower()
match_pattern = re.findall(r'\b[a-z]{3,15}\b', text_string)

finder = BigramCollocationFinder.from_words(match_pattern)
bigram_measures = nltk.collocations.BigramAssocMeasures()
print(finder.nbest(bigram_measures.pmi, 2))

NLTK Collocations文档:http://www.nltk.org/api/nltk.html?highlight=collocation#module-nltk.collocations

答案 1 :(得分:0)

nltk.brigrams会在特定文字中返回一对单词及其频率。试试这个:

import nltk
from nltk import bigrams

document_text = open('Words.txt', 'r')
text_string = document_text.read().lower()
tokens = word_tokenize(text_string)
result = bigrams(tokens)

输出:

[(('w1', 'w2'), 6), (('w3', 'w4'), 3), (('w5', 'w6'), 3), (('w7', 'w8'), 3)...]