Sha*_*ane 9 python regex perl arabic
我需要将纯文本UTF8文档从R语言更改为L语言到拉丁语言.不幸的是,它并不像角色字符音译那么容易.
例如,取决于单词构成,R到L语言(ا)中的"a"可以是"a"或"ә".
在使用ag,k,e或hamza(گ,ك,ە,ء)的单词中,
我需要将所有a,o,i,u(ا,و,ى,ۇ)更改为拉丁语ә,ѳ,i, ü(称为"软"元音).
例如.سالەم成为sәlêm,ءۇي变成üy,سوزمەن成为sѳzmên
在没有ag,k,e或hamza(گ,ك,ە,ء)
的单词中,a,o,i,u变为拉丁字符a,o,i,u(称为"硬"元音).
例如.الما成为alma,becomes成为ul,ورتا成为orta.
实质上,
g,k,e或hamza充当阿拉伯语脚本中的发音指南.
在拉丁语中,我需要两组不同的元音,具体取决于阿拉伯语脚本中的原始单词.
我想我可能需要将"软"元音词作为第一步,然后对文档的其余部分进行单独的查找和替换.但是,如何使用perl或python进行这样的查找和替换呢?
这是一个unicode示例:\ U + 0633\U + 0627\U + 0644\U + 06D5\U + 0645\U + 0648\U + 0631\U + 062A\U + 0627\U + 0674\U + 06C7\U + 064A\U + 0633\U + 0648\U + 0632\U + 0645\U + 06D5\U + 0645\U + 0627\U + 0644\U + 0645\U + 0627\U + 06C7\U +0644\U + 0645\U + 06D5\U + 0646\U + 0649\U + 06AD\U + 0627\U + 062A\U + 0649\U + 0645\U + 0634\U + 0627\U + 0644\U + 0642\U + 0627\U + 0631.
它应该看起来像:"sәlêmortaüysѳzmênalmaulmêningatentimalқar".(注意:字母ڭ,即U + 06AD实际上最终为两个字母,n + g,以产生"-ng"声).它看起来不应该像"salêmortauysozmênalmaulmêningatimalқar",也不应该像"sәlêmѳrtәüysѳzmênәlmәülmêningәtimxәlқәr".
非常感谢任何帮助.
命令:
\n\n$ echo \xd8\xb3\xd8\xa7\xd9\x84\xdb\x95\xd9\x85 \xd9\x88\xd8\xb1\xd8\xaa\xd8\xa7 \xd8\xa1\xdb\x87\xd9\x8a \xd8\xb3\xd9\x88\xd8\xb2\xd9\x85\xdb\x95\xd9\x86 \xd8\xa7\xd9\x84\xd9\x85\xd8\xa7 \xdb\x87\xd9\x84 \xd9\x85\xdb\x95\xd9\x86\xd9\x89\xda\xad \xd8\xa7\xd8\xaa\xd9\x89\xd9\x85 \xd8\xb4\xd8\xa7\xd9\x84\xd9\x82\xd8\xa7\xd8\xb1 | ./arabic-to-latin\n
Run Code Online (Sandbox Code Playgroud)\n\n输出:
\n\ns\xd3\x99l\xc3\xaam orta \xc3\xbcy s\xd1\xb3zm\xc3\xaan alma ul m\xc3\xaaning atim xal\xd2\x9bar\n
Run Code Online (Sandbox Code Playgroud)\n\n使用文件代替 stdin/stdout:
\n\n$ ./arabic-to-latin input_file_with_arabic_text_in_utf8 >output_latin_in_utf8\n
Run Code Online (Sandbox Code Playgroud)\n\n文件所在arabic-to-latin
:
#!/usr/bin/perl\nuse strict;\nuse warnings;\nuse utf8;\nuse open qw(:std :utf8);\n#XXX normalization\n\nsub replace_word {\n my ($word) = @_;\n $_ = $word;\n if (/\xd8\xa1|\xdb\x95|\xd9\x83|\xda\xaf/) { # g, k, e, or hamza in the word\n tr/\xd8\xa7\xd9\x88\xd9\x89\xdb\x87/\xd3\x99\xd1\xb3i\xc3\xbc/; # soft\n } else {\n tr/\xd8\xa7\xd9\x88\xd9\x89\xdb\x87/aoiu/; # hard\n }\n tr/\xd8\xb3\xd9\x84\xdb\x95\xd9\x85\xd8\xb1\xd8\xaa\xd8\xb2\xd9\x86\xd8\xb4\xd9\x82/sl\xc3\xaamrtznx\xd2\x9b/;\n s/\xd8\xa1\xc3\xbc\xd9\x8a/\xc3\xbcy/g;\n s/\xda\xad/ng/g;\n $_;\n}\n\nwhile (my $line = <>) {\n $line =~ s/(\\w+)/replace_word($1)/ge;\n print $line;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n使arabic-to-latin
文件可执行:
$ chmod +x ./arabic-to-latin\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
1692 次 |
最近记录: |