2016-07-13 66 views
1

給出全名(First + Surname)的列表,您如何找到文本文章中出現的名稱的頻率?將兩個單詞(全名)與Python中的文章文本進行比較

我試圖找到一種比較人的'名字'和'姓氏'到文本主體的有效方法。在這種情況下,文本的主體是一篇新聞文章,其名稱是澳大利亞政治家。

挑戰在於將新聞文章分解爲單個單詞,然後將名字& &姓氏與文章中的單詞進行比較。我曾想過把這些名字變成JSON字符串,但是覺得這樣做效率低下,反而學會了一種有效的方法。我一直在玩枚舉函數,沒有運氣。如果姓氏從'politicianName.txt'中刪除,但下面的函數將不起作用,但不適用於名字和姓氏。

def getNames(articletext): 
    politicianName = open("politicianName.txt").read().split('\n') 
    #for name in politicianName: #test the names read from file 
    # print name 
    wordList = articletext.split() 
    for word in wordList: 
     if word in politicianName and word.isalnum(): 
      print word 

article = 'Jacinta Allan this is an articletext scraped with urllib2' 
getNames(article) 



''' 
#The enumerate example I have been testing and playing around with 
mylist = [1, 6, 6, 4, 2, 3] 
for i, j in enumerate(mylist[:-1]): 
    if j == mylist[i+1]: 
     mylist[i] = "foo" 
     mylist[i+1] = "foo" 
print mylist 
''' 

politicianName.txt(簡述)

Jacinta Allan 
Daniel Andrews 
Neil Angus 
Louise Asher 
Brad Battin 
+0

相對於彼此名字的頻率單詞或名稱的頻率? –

+1

最有效的方法取決於要搜索的文本數量與要搜索的名稱數量之間的關係。我會建議迭代名稱,爲每個生成一個正則表達式並計數finditer() – sphere

+0

添加名字只會使事情變得複雜。如果沒有最後一個名字,政治家就不會被提及。我無法想象讀「Jacinta通過了一項法案......」。我的觀點是,只要搜索姓氏。 –

回答

0

試試這個:

[x for x in politicianName if x in article and x is not''] 

輸入:

politicianName = open("politicianName.txt").read().split('\n') 
article = 'Jacinta Allan this is an articletext scraped with urllib2' 

輸出地說:

['Jacinta Allan'] 
0

如何將它完全分開?

politicianName = [v for i in open("politicianName.txt").read().split('\n') for v in i.split()]

然後嘗試以下

article = 'Jacinta Allan this is an articletext scraped with urllib2' 
getNames(article) 

article = 'Allan, Jacinta passed a bill' 
getNames(article) 

1輸出: Jacinta Allan 第二組輸出: Jacinta

相關問題