我需要将纯文本UTF8文档从R语言更改为L语言。不幸的是,这不像字符音译那么容易。
例如,取决于单词的组成,在R到L语言(ا)中的“a”可以是“a”或“ә”。

用g,k,e或hamza(گ,ك,ย,words)表示
我需要将所有的a,o,i,u(ا,و,ى,ۇ)更改为拉丁文ә,ѳ,i,ü(称为“软”元音)。
例如。 سالغم变成sәlêm,ءۇي变成üy,سوزمصن变成sѳzmên

用不带g,k,e或hamza的单词表示
a,o,i,u更改为拉丁字符a,o,i,u(称为“硬”元音)。
例如。 الما变成阿拉木图,ۇل变成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ênalma ulmêningatimxalқar”。(注意:字母U,即U + 06AD,实际上以两个字母n + g结尾,发出“-ng”声音)。它不应该看起来像“salêmorta uysozmênalma ulmêningatimxalқar”,也不应该像“sәlêmѳrtәüysѳzmênәlmәülmêningәtimxәlқәr”。

非常感谢您的帮助。

最佳答案

命令:

$ echo سالەم ورتا ءۇي سوزمەن الما ۇل مەنىڭ اتىم شالقار | ./arabic-to-latin

输出:
sәlêm orta üy sѳzmên alma ul mêning atim xalқar

要使用文件而不是stdin/stdout:
$ ./arabic-to-latin input_file_with_arabic_text_in_utf8 >output_latin_in_utf8

其中arabic-to-latin文件:
#!/usr/bin/perl
use strict;
use warnings;
use utf8;
use open qw(:std :utf8);
#XXX normalization

sub replace_word {
    my ($word) = @_;
    $_ = $word;
    if (/ء|ە|ك|گ/) { # g, k, e, or hamza in the word
        tr/اوىۇ/әѳiü/; # soft
    } else {
        tr/اوىۇ/aoiu/; # hard
    }
    tr/سلەمرتزنشق/slêmrtznxқ/;
    s/ءüي/üy/g;
    s/ڭ/ng/g;
    $_;
}

while (my $line = <>) {
    $line =~ s/(\w+)/replace_word($1)/ge;
    print $line;
}

要使arabic-to-latin文件可执行:
$ chmod +x ./arabic-to-latin

关于python - 使用perl或python在一个词中用 "ا"替换阿拉伯字符 "a",但在另一个词中用 "ә",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14601271/

10-12 03:32