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.

  • Python: Zählfrequenz von Wörtern in einer Liste
  • Häufigkeitsanalyse mit Tupelfehler
  • Python-Web-Scraping, zählt das Auftreten einer Liste von Wörtern jeder Seite
  • Python-Bibliothek zum Abspielen von Festfrequenz-Klang
  • Wie kann man Frequenzinformationen aus einem eingegebenen Audio-Stream (mit PortAudio) extrahieren?
  • Pythonfrequenzerkennung
  • Schnellste Weg, um hdf5-Datei mit Python zu schreiben?
  • Read Specific Z Component Slice von 3D HDF von Python
  • Gibt es eine Analysegeschwindigkeit oder Speicherverbrauch Vorteil bei der Verwendung von HDF5 für große Array-Speicher (statt flache Binärdateien)?
  • TypeError: read_hdf () nimmt genau 2 Argumente (1 gegeben)
  • Mehrere Datensätze aus der Gruppe in HDF5 erhalten
  • GIL für IO beschränkten Thread in C-Erweiterung (HDF5)
  • 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.