Zählphrase-Frequenz in Python 3.3.2

Ich habe verschiedene Quellen im Web untersucht und habe verschiedene Methoden ausprobiert, konnte aber nur finden, wie man die Häufigkeit von einzigartigen Wörtern, aber nicht einmaligen Phrasen zählt. Der Code, den ich bisher habe, ist wie folgt:

import collections import re wanted = set(['inflation', 'gold', 'bank']) cnt = collections.Counter() words = re.findall('\w+', open('02.2003.BenBernanke.txt').read().lower()) for word in words: if word in wanted: cnt [word] += 1 print (cnt) 

Wenn möglich, würde ich auch gerne zählen, wie oft die Phrasen "Zentralbank" und "hohe Inflation" in diesem Text verwendet werden. Ich schätze jeden Vorschlag oder eine Anleitung, die du geben kannst.

  • Pandas zählen (deutlich) gleichwertig
  • Wie bekomme ich alle eindeutigen Wörter im Datenrahmen?
  • Anzahl der Dateien mit bestimmter Erweiterung in Python
  • Python-Skript, um num Zeilen in allen Dateien im Verzeichnis zu zählen
  • Python-Histogramm Einzeiler
  • Zählen der Anzahl der Werte zwischen dem Intervall
  • In Python zählen die Anzahl der Variablen in einer Klasse oder verhindern das Hinzufügen neuer Klassenvariablen
  • Python: Zählen Sie, wie oft ein Wort in einer Datei auftritt
  • 3 Solutions collect form web for “Zählphrase-Frequenz in Python 3.3.2”

    Zuerst einmal ist das, wie ich das cnt generieren würde, das du tust (um den Speicher zu reduzieren)

     def findWords(filepath): with open(filepath) as infile: for line in infile: words = re.findall('\w+', line.lower()) yield from words cnt = collections.Counter(findWords('02.2003.BenBernanke.txt')) 

    Nun, auf Ihre Frage über Phrasen:

     from itertools import tee phrases = {'central bank', 'high inflation'} fw1, fw2 = tee(findWords('02.2003.BenBernanke.txt')) next(fw2) for w1,w2 in zip(fw1, fw2)): phrase = ' '.join([w1, w2]) if phrase in phrases: cnt[phrase] += 1 

    Hoffe das hilft

    Um wörtliche Vorkommen von paar Phrasen in einer kleinen Datei zu zählen:

     with open("input_text.txt") as file: text = file.read() n = text.count("high inflation rate") 

    Es gibt nltk.collocations Modul, das Werkzeuge zur Verfügung stellt, um Wörter zu identifizieren, die häufig nacheinander erscheinen. Python 3 Unterstützung ist in alpha :

     import nltk from nltk.tokenize import word_tokenize, sent_tokenize from nltk.collocations import BigramCollocationFinder, TrigramCollocationFinder # run nltk.download() if there are files missing words = [word.casefold() for sentence in sent_tokenize(text) for word in word_tokenize(sentence)] words_fd = nltk.FreqDist(words) bigram_fd = nltk.FreqDist(nltk.bigrams(words)) finder = BigramCollocationFinder(word_fd, bigram_fd) bigram_measures = nltk.collocations.BigramAssocMeasures() print(finder.nbest(bigram_measures.pmi, 5)) print(finder.score_ngrams(bigram_measures.raw_freq)) # finder can be constructed from words directly finder = TrigramCollocationFinder.from_words(words) # filter words finder.apply_word_filter(lambda w: w not in wanted) # top n results trigram_measures = nltk.collocations.TrigramAssocMeasures() print(sorted(finder.nbest(trigram_measures.raw_freq, 2))) 

    Angenommen, die Datei ist nicht riesig – das ist der einfachste Weg

     for w1, w2 in zip(words, words[1:]): phrase = w1 + " " + w2 if phrase in wanted: cnt[phrase] += 1 print(cnt) 
    Python ist die beste Programmiersprache der Welt.