文字列にバックスラッシュがありません。持っていないものは、削除できません。
あなたが何を示しているか考えてみてください'\x82'
...これは1バイトの文字列です。
>>> s = '\x82'
>>> len(s)
1
>>> ord(s)
130
>>> hex(ord(s))
'0x82'
>>> print s
é # my sys.stdout.encoding is 'cp850'
>>> print repr(s)
'\x82'
>>>
あなたが「むしろ得たい」もの ( 'x82'
) は無意味です。
更新文字列の「非ASCII」部分(とで囲まれ@
て>
いる)は、実際にはほとんどがひらがなで書かれ、を使用してエンコードされた日本語のテキストですshift_jis
。IDLE セッションのトランスクリプト:
>>> y = '\x82\xb1\x82\xea\x82\xa9\x82\xe7\x8c\xa9\x82\xa6\x82\xe9\x82\xbe\x82\xeb\x82\xa4'
>>> print y.decode('shift_jis')
これから見えるだろう
Google 翻訳は、英語の翻訳として「Can't you see the future」を生成します。
別の回答に対するコメントで、次のように言います。
私はアスキーが必要です
と
私が行っているのは、nltk.edit_distance() を使用して 2 つの文字列がどれだけ離れているかを確認することです。これにより、実際の距離の倍数が得られます。これで十分です。
なぜASCIIが必要だと思いますか?編集距離は、アルファベットとはまったく無関係に定義されます。
まず、文字列の無意味な変換を行っても、真の距離の一貫した、または予測可能な倍数は得られません。第二に、以下のうち:
x
repr(x)
repr(x).replace('\\', '')
repr(x).replace('\\x', '') # if \ is noise, so is x
x.decode(whatever_the_encoding_is)
なぜ3番目を選ぶのですか?
コメントに応じて更新 2 :
(1) なぜ「ascii」が必要だと思うのか、あなたはまだ語っていません。nltk.edit_distanceは "ascii" を必要としません -- 引数は "文字列" (それが何を意味するにせよ) と言われますが、コードは動作するオブジェクトの任意の 2 つのシーケンスで!=
動作します。つまり、上記の 5 つのオプションの最初のオプションを使用しないのはなぜでしょうか?
(2) 編集距離の最大 100% の膨張を受け入れることは、やや驚くべきことです。現在選択されている方法では、日本語の文字ごとに 4 つの記号 (16 進数) が使用されることに注意してください。repr(x)
1 文字あたり 8 つの記号を使用します。x
(最初のオプション) は 2 を使用します。
(3) 編集距離を正規化することで、膨張効果を軽減できます。distance(s1, s2)
number_of_symbols しきい値と比較する代わりにdistance(s1, s2) / float(max(len(s1), len(s2)))
、fraction しきい値と比較します。いずれにせよ、通常は正規化が使用されることに注意してください...編集距離が 4 の 20 シンボル文字列間の非類似性は、編集距離が 2 の 10 シンボル文字列間の非類似性とほぼ同じであり、2 倍ではないという理論的根拠があります。
(4) nltk.edit_distance は、私が今まで見た edit_distance の最も驚くほど非効率的な純粋な Python 実装です。Magnus Lie Hetland によるこの実装は、はるかに優れていますが、まだ改善の余地があります。