混合テキストファイルの言語X文字数は何ですか?

混合テキストファイルの言語X文字数は何ですか?

混合言語のテキストファイルがあり、その言語の1つで印刷可能な文字の総数を簡単に計算したいと思います。言語が異なるUnicode範囲にある場合は役立ちます。

私の具体的なユースケースにはヘブライ語、多言語ギリシャ語、英語が含まれていますが、この問題に対する解決策は他の状況でも一般化できると思います。

私はヘブライ語の文字(Unicodeなど)だけを計算したいと思います[\u0590-\u05ff]。以下は短いサンプル入力ファイルです(直接計算した結果62個のヘブライ語文字を含む)。

[ Ps117 ]‬
h1: ‫  הללו את יהוה כל גוים שבחוהו כל האמים ‬
r1: Praise the LORD, all nations! Extol him, all peoples!
g1: Αλληλουια. Αἰνεῖτε τὸν κύριον, πάντα τὰ ἔθνη, ἐπαινέσατε αὐτόν, πάντες οἱ λαοί,
b1: Alleluia. Praise the Lord all you nations: praise him all you peoples.

h2: ‫  כי גבר עלינו חסדו ואמת יהוה לעולם הללו יה ‬
r2: For great is his steadfast love toward us; and the faithfulness of the LORD endures for ever. Praise the LORD!
g2: ὅτι ἐκραταιώθη τὸ ἔλεος αὐτοῦ ἐφ' ἡμᾶς, καὶ ἡ ἀλήθεια τοῦ κυρίου μένει εἰς τὸν αἰῶνα.
b2: For his mercy has been abundant toward us: and the truth of the Lord endures for ever.

役に立つ場合は、Ubuntu 16.04.2 LTSを使用しています。 Perlは可能なオプションであるかもしれませんし、いくつかのシェルスクリプトかもしれません。しかし、私はこれらのことについて知らないので尋ねます!


好奇心で私が入力した行は次のとおりです。h=ヘブライ語。r=改訂標準駅。 =七十人のgb;それぞれの場合に句番号を付けます。

答え1

Unicode文字列の長さを決定するのに問題がある可能性があります。バラよりこのページ正規化の詳細については、Twitter開発者のドキュメントをご覧ください。

文字数は、構成するロケールによって異なります。locale以下を実行して、UTF-8ロケールが設定されていることを確認できます。これが完了すると、@stephen-rauchのコードが機能します。

使用する正規表現ライブラリに応じて、名前付きスクリプトを使用することもできます。たとえば、\p{Hebrew}以下はヘブライ語以外のすべての文字を削除する例です\P{Greek}\P{Hebrew}協会

編集:初期結果は、誤って設定されたロケールが原因で発生しました。

答え2

これらは私に近いようです(Ubuntu 16.04でテスト)

$ perl -0777 -MEncode -ne 'print decode("UTF-8",$_) =~ tr/\x{0590}-\x{05ff}//,"\n"' input
62
$ perl -0777 -MEncode -ne 'print decode("UTF-8",$_) =~ tr/\p{Hebrew}//,"\n"' input
63

「正しい」答えが何であるかよくわかりません。

答え3

Pythonを使用すると、次のことができます。

パスワード:

# coding: utf-8
import re
import codecs

#find_hebrew = re.compile(ur'[\u0590-\u05ff]+')  # python 2
find_hebrew = re.compile(r'[\u0590-\u05ff]+')   # python 3

count = 0
with codecs.open('text_file', 'rU', encoding='utf-8') as f:
    for line in f.readlines():
        for n in find_hebrew.findall(line):
            count += len(n)
print(count)

結果:

62

関連情報