0

UTF-8 で保存されたウルドゥー語文書内の同じ単語の数を数えようとしています。

たとえば、スペースで区切られた3つのまったく同じ単語を含むドキュメントがあります

خُداوند خُداوند خُداوند

次のコードを使用してファイルを読み取って、単語を数えようとしました。

        file_obj = codecs.open(path,encoding="utf-8")
        lst = repr(file_obj.readline()).split(" ")
        word = lst[0]
        count =0
        for w in lst:
            if word == w:
                count += 1
        print count

しかし、取得している count の値は 1 ですが、3 を取得する必要があります。

Unicode 文字列を比較するにはどうすればよいですか?

4

3 に答える 3

3

コードから を削除repr()します。repr()デバッグ出力を作成するためにのみ使用します。Unicode 値を文字列に変換して、インタープリターに貼り付けることができます。

これは、ファイルからの行が次のように保存されることを意味します。

>>> repr(u'خُداوند خُداوند خُداوند\n').split(" ")
["u'\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f", '\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f', "\\u062e\\u064f\\u062f\\u0627\\u0648\\u0646\\u062f\\n'"]

二重のバックスラッシュ (エスケープされた Unicode エスケープ) と、最初の文字列が で始まりu'、最後の文字列が で終わることに注意してください\\n'。これらの値が等しくなることはありません。

を削除し、引数なしrepr()で使用して、末尾の空白も削除します。.split()

lst = file_obj.readline().split()

あなたのコードは動作します:

>>> res = u'خُداوند خُداوند خُداوند\n'.split()
>>> res[0] == res[1] == res[2]
True

最初に入力を正規化する必要がある場合があります。一部の文字は、1 つの Unicode コードポイントまたは 2 つの結合コードポイントとして表現できます。正規化は、そのようなすべての文字を構成または分解された状態に移動します。Unicode の正規化を参照してください。

于 2013-11-03T10:28:56.687 に答える
1

repr?を削除してみてください。

lst = file_obj.readline().split(" ")

ポイントは、少なくともprint変数が好きlstで、wそれらが何であるかを確認する必要があるということです。

于 2013-11-03T10:16:22.613 に答える
0

Python でのユニコード文字列の比較:

a = u'Artur'
print(a)
b = u'\u0041rtur'
print(b)

if a == b:
    print('the same')

結果:

Artur
Artur
the same
于 2013-11-03T10:21:03.677 に答える