Подсчет фраз в Python с использованием NLTK

Я пытаюсь получить количество слов из текстового файла, но до сих пор я могу получить количество слов (см. Ниже). Мне нужно расширить эту логику, чтобы подсчитать количество раз, когда в текстовом файле появляется фраза из двух слов.

Фразы могут быть определены / сгруппированы с использованием логики из 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[az]{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 Solutions collect form web for “Подсчет фраз в Python с использованием NLTK”

Вы можете получить все две фразы, используя модуль collocations . Этот инструмент идентифицирует слова, которые часто появляются последовательно внутри корпусов.

Чтобы найти две фразы, вам нужно сначала рассчитать частоты слов и их внешний вид в контексте других слов. NLTK имеет класс BigramCollocationFinder который может это сделать. Вот как мы можем найти Bigram Collocations:

 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[az]{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 Docs: http://www.nltk.org/api/nltk.html?highlight=collocation#module-nltk.collocations

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)...] 
  • Python - WordNet NLTK KeyError
  • NLTK: почему nltk не распознает переменную CLASSPATH для stanford-ner?
  • извлечение предложений из pos-tagged corpus с определенным словом, комбо тегов
  • Сохранение и загрузка тестов классифицируют Naive Bayes Classifier в NLTK другим способом
  • Что может заставить WordNetCorpusReader не иметь атрибута LazyCorpusLoader?
  • Написание токенизатора в Python
  • Создание Nграмм (Unigrams, Bigrams и т. Д.) Из большого корпуса .txt-файлов и их частоты
  • Установка данных nltk в скрипт setup.py
  • Python - лучший язык программирования в мире.