2016-09-09 5 views
-1

Ich habe eine große Anzahl von Namen aus verschiedenen Quellen.Satz Clustering

  1. Ich muss alle Gruppen (Teil der Namen) extrahieren, die von einem zum anderen wiederholen. Im folgenden Beispiel sollte Programm suchen: Post, Office, Post Office.
  2. Ich muss Popularität zählen.

Also ich möchte eine Liste nach Phrasen sortiert nach Beliebtheit zu extrahieren. Hier

ist ein Beispiel für Namen:

Post Office - High Littleton 
Post Office Pilton Outreach Services 
Town Street Post Office 
post office St Thomas 

Grundsätzlich müssen einige Algorithmus oder besser Bibliothek, um herauszufinden, um solche Ergebnisse zu erzielen:

Post Office: 16999 
Post: 17934 
Office: 16999 
Tesco: 7300 
... 

Hier ist die vollständige example of names.

schrieb ich einen Code, der für einzelne Wörter in Ordnung ist, aber nicht für Sätze:

from textblob import TextBlob 
import operator 

title_file = open("names.txt", 'r') 
blob = TextBlob(title_file.read()) 
list = sorted(blob.word_counts.items(), key=operator.itemgetter(1)) 
print list 
+0

"Ich möchte irgendeine Relevanz zwischen ihnen erhalten, und gruppiere alle Ergebnisse nach Sätzen (die aus den Namen extrahiert werden)"? Versuchen Sie zu bearbeiten und paraphrasieren – garg10may

+0

Möchten Sie die Anzahl der Vorkommen von N-Gramm oder Cluster für Satz zählen? Dies sind zwei getrennte Dinge. –

+0

@SemihYagcioglu Ich möchte Sätze, die am beliebtesten unter allen Namen ist: nur Gruppen, die mehr als 1 Namen enthält; Nur Gruppen, die nur Textdaten enthalten; es könnte Sätze enthalten, aus mehreren Wörtern; nur Eingabe sollte - eine Liste von Namen sein –

Antwort

0

Sie sind nicht für Clustering suchen (und das ist wahrscheinlich, warum „alle von ihnen saugen“ für @andrewmatte).

Was Sie suchen, ist Wortzählung (oder genauer, N-Gramm-Zählung). Was ist eigentlich ein viel einfacheres Problem. Das ist der Grund, warum Sie keine Bibliothek dafür finden werden ...

Nun, tatsächlich jave Sie einige Bibliotheken. In Python zum Beispiel hat das collections Modul die Klasse Counter, die viel von dem wiederverwendbaren Code hat.

Ein ungetestet, sehr einfach Code:

from collections import Counter 
counter = Counter() 
for s in sentences: 
    words = s.split(" ") 
    for i in range(len(words)): 
    counter.add(words[i]) 
    if i > 0: counter.add((words[i-1], words[i])) 

Sie CSN aus counter die häufigste bekommen. Wenn Sie Wörter und Wortpaare trennen möchten, können Sie zwei Zähler verwenden. Wenn Sie längere Sätze benötigen, fügen Sie eine innere Schleife hinzu. Sie können auch Sätze (z. B. Kleinbuchstaben) bereinigen und einen Regexp zum Teilen verwenden.

0

Sind Sie auf der Suche nach so etwas?

workspace={} 

with open('names.txt','r') as f: 
    for name in f: 
    if len(name): # makes sure line isnt empty 
     if name in workspace: 
     workspace[name]+=1 
     else: 
     workspace[name]=1 

for name in workspace: 
    print "{}: {}".format(name,workspace[name])