2017-05-11 75 views
2

我正在嘗試檢測可能由未知數量的語言組成的文本的語言。下面的代碼給了我不同的語言爲答案 注:我減少了審查,原因是其在後期過程中給予的錯誤「」不準Python中的文本語言檢測

print(detect(كانت جميله وممتعة للأطفال اولا حيث اماكن اللعبر)) 
print(detect(的馬來西亞)) 
print(detect(Vi havde 2 perfekte dage i Legoland Malaysia)) 
print(detect(Wij hebben alleen gekozen voor het waterpark maar daar ben je vrijs snel doorheen. Super leuke glijbanen en overal ruimte om te zitten en te liggen. Misschien volgende keer een gecombineerd ticket kopen met ook toegang tot waterpark)) 
print(detect(This is a park thats just ok, nothing great to write home about. There is barely any shade, the weather is always really hot so they need to take this into consideration. The atractions are just meh. I would only go if you are a fan of lego, for the sculptures are nice.)) 

這裏是輸出

ar 
zh-cn 
da 
nl 
en 

但使用以下循環,所有評論給我'恩'作爲結果

from langdetect import detect 
import pandas as pd 
df = pd.read_excel('data.xls') # 
lang = []  
for r in df.Review: 
    lang = detect(r) 
    df['Languagereveiw'] = lang 

輸出是所有五行的'en'。

需要指導,哪裏是缺失鏈?

這裏是樣品data

其次,我怎樣才能獲得語言的完整名稱,即英語「恩」

+2

您通過這樣做覆蓋整個列:'df ['Languagereveiw'] = lang'您可以擺脫那個循環並且只是做'df ['Languagereveiw'] = df ['Review']。apply(detect)' – EdChum

+0

爲什麼不投票:(( – Abrar

+0

@EdChum你可以把這個解決方案放在答案中? 它的工作 – Abrar

回答

5

在你的循環你做這個覆蓋整列:

df['Languagereveiw'] = lang 

如果你想爲循環使用iteritems這樣做的:

for index, row in df['Review'].iteritems(): 
    lang = detect(r) 
    df.loc[index, 'Languagereveiw'] = lang 

然而,你可以溝圈,只是做

df['Languagereveiw'] = df['Review'].apply(detect) 

這是語法糖對整列

關於你提到的有關從語言代碼轉換爲完整的說明後一個問題執行你的FUNC:

'恩' 到 '英語',

看看polyglot

這提供了檢測語言,獲取語言代碼和完整說明的工具

+0

Thanks @EdChum 它工作完美。 – Abrar