[英]How to apply Polyglot Detector function to dataframe
假設我有一個名為df.Text
的列,其中包含文本(多於 1 個句子),並且我想使用多語言Detector
來檢測語言並將值存儲在新列中df['Text-Lang']
我如何確保我還捕獲其他細節,如code
和confidence
testEng ="This is English"
lang = Detector(testEng)
print(lang.language)
返回
名稱:英文代碼:en 置信度:94.0 讀取字節數:1920
但
df['Text-Lang','Text-LangConfidence']= df.Text.apply(Detector)
以。。結束
AttributeError: 'float' 對象沒有屬性 'encode' 並且 Detector 無法可靠地檢測語言。
我是否錯誤地應用了 Detector 功能或錯誤地存儲了輸出或其他什么?
首先,如果你只需要polyglot
進行語言檢測,你最好直接使用pycld2
,這是在幕后使用的。 它有更干凈的 API。
也就是說,您聲明的錯誤來自Text
列中的一個值,它是一個實數。 因此,您必須將這樣的值轉換為字符串。
您將遇到的下一個問題是最小文本長度。 如果文本太短, polyglot
會拋出異常。 您必須通過傳遞quiet=True
來消除異常。
現在,應用Detector
將返回一個對象。 所以你必須解析它來提取你想要的信息。 要提取語言名稱,您必須導入icu
模塊(它是polyglot
的依賴項,因此您已經安裝了它):
import icu
df.Text = df.Text.astype(str)
df['poly_obj'] = df.Text.apply(lambda x: Detector(x, quiet=True))
df['Text-lang'] = df['poly_obj'].apply(lambda x: icu.Locale.getDisplayName(x.language.locale))
df['Text-LangConfidence'] = df['poly_obj'].apply( lambda x: x.language.confidence)
之后,您可以刪除poly_obj
列。
你可以試試這個:
testEng ="This is English"
lang = Detector(testEng)
df['Text-Lang']=lang.language.code
df['Text-LangConfidence']=leng.language.confidence
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.