在命令行中对通用日语进行罗马化

问题描述 投票:0回答:1

我想用bash命令行上的标准Hepburn system来音译包括汉字在内的通用日语。

我已经评估了几个选项,但是

  • 谷歌翻译(通过翻译壳牌提供)仅适用于平假名/片假名
  • KAKASI提供ASCII,但没有音译(所以Toukyou而不是Tōkyō)

所以我想解析http://nihongo.j-talk.com的输出输出是在div.outputwrap或div.output

如果纯粹使用Bash工具(curl / jq?)这样做是徒劳的,我怎么能用Python / BeautifulSoup达到这个目的?

很抱歉没有提供代码片段,我不知道如何将数据发布到网站,如果没有API则使用结果。

python bash transliteration cjk
1个回答
0
投票

看看http://nihongo.j-talk.com网站的源代码html,我猜测了API。 以下是步骤:

1)通过wget将日语字符串发送到服务器,并在index.html中获取结果。 2)解析index.html并提取Romaji字符串。

以下是示例代码:

#!/bin/bash

string="日本語は、主に日本で使われている言語である。日本では法規によって「公用語」として規定されているわけではないが、各種法令(裁判所法第74条、会社計算規則第57条、特許法施行規則第2条など)において日本語を用いることが定められるなど事実>上の公用語となっており、学校教育の「国語」でも教えられる。"

uniqid="46a7e5f7e7c7d8a7d9636ecb077da485479b66bc"

wget -N --post-data "uniqid=$uiqid&Submit='Translate Now'&kanji_parts=standard&kanji=$string&converter=spaced&kana_output=romaji" http://nihongo.j-talk.com/ > /dev/null 2>&1 

perl -e ' 
$file = "index.html"; 
open(FH, $file) or die "$file: $!\n";

while (<FH>) {
    if (/<div id=.spaced. class=.romaji.>(.+)/) {
        ($str = $1) =~ s/<.*?>//g;
        $str =~ s/\&\#(\d+);/&utfconv($1)/eg;
        print $str, "\n";
    }
}

# utf16 to utf8
sub utfconv {
    $utf16 = shift;
    my $upper = ($utf16 >> 6) & 0b0001_1111 | 0b1100_0000;
    my $lower = $utf16 & 0b0011_1111 | 0b1000_0000;
    pack("C2", $upper, $lower);
}'

一些评论: - 我用Perl编写解析器只是因为它对我来说比较熟悉,但你可以通过读取index.html文件修改或转换为其他语言。 - uniqid字符串是我从网站的html源中选取的。如果它不能正常工作,请确保嵌入在html源代码中的内容。

希望这可以帮助。

© www.soinside.com 2019 - 2024. All rights reserved.