我有混合语言文本文件,并且想计算其中一种语言的可打印字符的简单总数。语言位于不同的 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
答案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