3

私のスクリプトはcsvファイルからデータを読み取ります。csvファイルには、英語または英語以外の単語の複数の文字列を含めることができます。

テキストファイルにガベージ文字列が含まれている場合があります。それらの文字列を特定し、それらの文字列をスキップして他の文字列を処理したい

doc = codecs.open(input_text_file, "rb",'utf_8_sig')
fob = csv.DictReader(doc)
for row, entry in enumerate(f):
    if is_valid_unicode_str(row['Name']):
         process_futher

def is_valid_unicode_str(value):
     try:
         function
         return True
     except UnicodeEncodeError:
         return false

csv 入力:

"Name"
"袋è¢âdcx€¹Ã¤Â¸Å½Ã¦Å“‹å‹们çâ€ÂµÃ¥Â­Âå•â€"
"元大寶來證券"
"John Dove"

ガベージ文字列を識別し、有効な文字列のみを処理する関数 is_valid_unicode_str() を汚したいと考えています。

デコードを使用しようとしましたが、ガベージ文字列のデコード中に失敗しませんでした

value.decode('utf8')

予想される出力は、処理される中国語と英語の文字列を含む文字列です。

有効な Unicode ファイルをフィルタリングする機能を実装する方法を教えてください。

4

2 に答える 2

8

(ftf 開発者はこちら)

テキストが「袋袋与朋友们電子商」である可能性が高いことがわかりました。友、子、商の文字を推測する必要がありました。これは、印刷できない文字が質問の文字列に含まれていない文字であるためです。推測するとき、私は少数の可能性から最も一般的な文字を選びました. そして、「dcx」がどこにあるのか、なぜそこにあるのかわかりません。

ここでは Google 翻訳はあまり役に立ちませんが、e コマースに関しては何か意味があるようです。

これがあなたのテキストに起こったすべてです:

  1. UTF-8 としてエンコードされ、sloppy-windows-1252 として誤ってデコードされたことが2 回ありました
  2. UTF-8シーケンスの途中に「dcx」という文字が挿入されていました
  3. windows-1252 に存在しない文字 (バイト値 81、8d、8f、90、および 9d) が削除されました
  4. 改行しないスペース (バイト値 a0) が末尾から削除されました

最初の問題だけが発生した場合は、ftfy.fix_text_encodingそれを修正できます。スタック オーバーフローに文字列を取得しようとしたときに、残りの問題が発生した可能性があります。

だからここに私の推薦があります:

  • 誰がデータを sloppy-windows-1252 として誤ってデコードし続けているかを突き止め、代わりに UTF-8 としてデコードするように依頼します。
  • またこのような弦ができたら、試しftfy.fix_text_encodingてみてください。
于 2015-03-16T20:53:35.987 に答える
3
于 2015-03-16T09:51:46.997 に答える