6

df.Textテキスト (1 文以上) を含む列があり、ポリグロットDetectorを使用して言語を検出し、値を新しい列に格納したい場合、次のような他の詳細も確実にdf['Text-Lang']取得するにはどうすればよいですか?codeconfidence

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 関数を間違って適用したり、出力を間違って保存したりしていますか?

4

2 に答える 2

9

polyglotまず、言語検出のみが必要な場合はpycld2、直接使用することをお勧めします。これは、舞台裏で使用されているものです。よりクリーンな APIを備えています。

Textそうは言っても、あなたが述べたエラーは、実数である列の値の1つに由来します。したがって、そのような値を文字列に変換する必要があります。

次に出くわす問題は、最小限のテキストの長さです。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列を削除できます。

于 2018-08-05T15:28:02.383 に答える