2016-09-09 51 views
-1

我有來自不同來源的大量名字。句子聚類

  1. 我需要提取所有組(名稱的一部分),它們從一個到另一個重複。 在下面的例子程序應該找到:郵政,辦公室,郵局。
  2. 我需要獲得人氣。

所以我想提取一個按照熱門程度排序的短語列表。

這裏是名稱的一個例子:

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

基本上需要找出一些算法或更好的庫,能得到這樣的結果:

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

下面是完整的example of names

我寫了一個代碼是罰款單的話,而不是句子:

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

「我想得到它們之間的任何相關性,並將所有結果按句子(從名稱中提取)」分組?嘗試編輯和釋義 – garg10may

+0

你想計算n-gram或一個句子的出現次數嗎?這是兩件獨立的事情。 –

+0

@SemihYagcioglu我想得到的句子,這是所有名字中最受歡迎的句子: 只有組,其中包含超過1名;僅包含文本數據的組,僅包含 ;它可能包含幾個單詞的句子; 只有輸入應該是 - 名稱列表 –

回答

0

你是不是在找集羣(這可能是爲什麼「所有的人都吸」爲@andrewmatte)。

你正在尋找的是字數(或更準確地說,正克計數)。這實際上是一個更容易的問題。這就是爲什麼你不會找到任何圖書館...

嗯,實際上,你jave一些圖書館。例如,在python中,collections模塊的類Counter具有許多可重用代碼。

一個未經考驗的,很基本的代碼:

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])) 

您CSN從counter得到最頻繁。如果你想單詞和單詞對分開,可以隨意使用兩個計數器。如果您需要更長的短語,請添加一個內部循環。您可能還想要清理句子(例如小寫)並使用正則表達式進行分割。

0

你在找這樣的事嗎?

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])