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.

  • Wie kann man Frequenzinformationen aus einem eingegebenen Audio-Stream (mit PortAudio) extrahieren?
  • Häufigkeitsanalyse mit Tupelfehler
  • Pythonfrequenzerkennung
  • Python-Bibliothek zum Abspielen von Festfrequenz-Klang
  • Python: Zählfrequenz von Wörtern in einer Liste
  • Python-Web-Scraping, zählt das Auftreten einer Liste von Wörtern jeder Seite
  • Wie unterscheidet sich HDF5 von einem Ordner mit Dateien?
  • Das ist schneller für laden: pickle oder hdf5 in python
  • H5py: Chunking auf resizable Dataset
  • Wie kann man ein Array in der hdf5-Datei speichern, das zu groß ist, um im Speicher zu laden?
  • PyTables für Python 2.7 kann nicht neu installiert werden
  • HDFStore.append (string, DataFrame) schlägt fehl, wenn String-Spalteninhalte länger sind als die bereits vorhandenen
  • 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.