将中文拼音转换为数字形式

时间:2010-11-10 22:07:24

标签: php nlp cjk

我正在寻找将音调标记用重音(例如:Nínhǎo)写成拼音的拼音,用数字/ ASCII形式写成的拼音(例如:Nin2 hao1)。

有没有人知道任何库,最好是PHP?或者对中文/拼音有充分的评论意见?

我自己开始写一篇相当简单的文章,但我不会说中文,也不完全理解文字应该用空格分开的规则。

我能够编写一个转换器来翻译:

Nín hǎo. Wǒ shì zhōng guó rén ==> Nin2 hao3. Wo3 shi4 zhong1 guo2 ren2

但是你如何处理如下的单词 - 他们是否将空格分成多个单词,或者你是否插入单词中的音调数字(如果是这样,在哪里?): huā shíjiānwèishénmeyuèláiyuèshēngbìng等。

2 个答案:

答案 0 :(得分:5)

解析拼音而没有空格分隔每个单词的问题是会有歧义。以中国古代都城长安的名称为例:Cháng'ān(注意消歧的撇号)。如果我们删除撇号,但可以通过两种方式解释:Chán gānCháng ān。一个中国人会告诉你,第二个更可能,取决于当然的背景,但你的计算机无法做到这一点。

假设没有歧义,并且所有输入都是有效的,我会这样做的方式如下:

  1. 创建重音折叠功能
  2. 创建一个有效拼音数组(你应该从维基百科页面获取拼音)
  3. 将每个单词与有效拼音列表相匹配
  4. 如果对最后一个字符属于下一个单词的可能性存在歧义,请检查下一个单词,例如:
  5.  
     shēngbìng
         ^ Does this 'g' belong to the next word?
     

    无论如何,音调的数字表示的正确定位以及代表每个重音的正确数字在Wikipeda关于拼音的文章的这一部分中得到了很好的阐述:http://en.wikipedia.org/wiki/Pinyin#Numerals_in_place_of_tone_marks。您可能还想了解IMEs如何完成工作。

答案 1 :(得分:2)

间距应该保持不变,但是你的音调编号不正确。 Nin2 hao3。 Wo3 shi4 zhong1 guo2 ren2。

wèishénme成为wei4shen2me。

  1. 通过将“āáǎà”映射到“a”等来删除变音符号
  2. 使用简单的最大匹配算法,将化合物分成音节(普通话音节只有418个左右)。
  3. 附加数字(你必须记住你删除了哪种标记)并将音节重新加入到复合词中。