1

Python NLTK で Unicode テキストにタグを付けています。問題は、テキストが不適切にエンコードされたデータ ソースからのものであり、エンコーディングが指定されていないことです。少しいじった後、テキストはUTF-8でなければならないことがわかりました。入力文字列が与えられた場合:

 s = u"The problem isn’t getting to Huancavelica from Huancayo to the north."

POS タグ付けなどのために NLTK で処理したいのですが、特殊文字が解決されず、次のような出力が得られます。

The/DT problem/NN isn’t/NN getting/VBG

それ以外の:

The/DT problem/NN isn't/VBG getting/VBG

これらの特殊文字からテキストをきれいにするにはどうすればよいですか?

フィードバックをお寄せいただきありがとうございます。

ムロン

更新:を実行するHTMLParser().unescape(s)と、次のようになります。

 u'The problem isn\u2019t getting to Huancavelica from Huancayo to the north.'

&他のケースでは、テキストにやのようなものがまだ
表示されます。これを NLTK が理解できるものに変換するにはどうすればよいですか?

4

1 に答える 1

4

これは、文字/Unicode エンコーディングの問題ではありません。あなたが持っているテキストには、マークアップである XML/HTML数字参照エンティティが含まれています。ファイルを解析するために使用しているライブラリが何であれ’、適切な文字を逆参照する機能を提供する必要があります。

どのライブラリにもバインドされていない場合は、「Python 文字列で HTML エンティティをデコードしますか? 」を参照してください。

結果の文字列には、ASCII 単一引用符の代わりに特別なアポストロフィが含まれます。結果でそれを置き換えることができます:

In [6]: s = u"isn’t"

In [7]: print HTMLParser.HTMLParser().unescape(s)
isn’t

In [8]: print HTMLParser.HTMLParser().unescape(s).replace(u'\u2019', "'")
isn't

残りのキャラクターは Unescape が担当します。たとえば&&シンボル自体です。
CR記号 ( \r) であり、元のテキストがどこから来ているかに応じて、無視するか改行に変換することができます (古い mac では改行に使用されていました)。

于 2013-04-11T11:55:31.713 に答える