混合文本文件中 X 语言的字符数?

混合文本文件中 X 语言的字符数?

我有混合语言文本文件,并且想计算其中一种语言的可打印字符的简单总数。语言位于不同的 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 可能是一个可能的选择,或者一些 shell 脚本......但我不知道这些事情,这就是我问的原因!


出于好奇,我输入的行是:h=希伯来语;r= 修订的标准版本;g= 希腊七十士译本;b= 七十士译本布伦顿译本;在每种情况下都后跟一个诗节编号。

答案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

相关内容