1

这里例如。
原句:小さくとも健気で美しい月が<br> 发音:しょうさくともけなげでびしいつきが<br>

我想得到汉字的发音,就像下面一样

小:しょう
健気:けなげ
美:び
月:き

我认为LCS是获得它的算法之一,但它认为有时由于连续的平假名它可能会失败,那么有没有更好的算法来解决这个问题?

justhal 是对的,只是让我们将源句和发音句视为字符串,所以我想做的是将汉字与发音匹配。

4

3 回答 3

1

这似乎是一个比 LCS 更简单的问题,因为句子中的每个平假名字符串都必须出现在发音中。

让我们将句子中的一串平假名称为“h-string”。

如果句子中的一个 h 字符串只匹配发音中的一个子字符串,那么我们可以拆分问题。例如,这个:

[小*さくとも*健気で美しい月が] <=> [しょう*さくとも*けなげでびしいつきが]

变成这样:

[小] <=> [しょう]
[健気で美しい月が] <=> [けなげでびしいつきが]

在这个例子中,这个过程就足够了,因为没有歧义;每个 h 字符串在发音中只出现一次。我们必须考虑更困难的情况。

我将用罗马字符替换平假名和汉字的序列,部分是为了抽象,但主要是因为我不会说日语,也无法编造真正的日语句子作为例子。前面的例子变成:

[AwBCxDyEz] <=> [swtxuyvz]

这很容易分解:
A:s
BC:t
D:u
E:v

这个过程将一直有效,直到我们遇到一个映射,其中所有 h 字符串都是内部的,并且没有一个在发音中是唯一的:

[AyBzC] <=> [yuzyvzyzwzyx]

现在我们必须考虑所有可能的匹配:

[yuz y v z yzwzyx]
[yuz y vzy z wzyx]
[yuz y vzyzw z yx]
[yuzyvz y zw z yx]

在这种情况下,算法必须报告 {A, B, C} 的 4 种可能发音。

于 2013-09-23T11:03:39.957 回答
1

//警告:请不要说我不是日语专家,而且还只是学习它。

据我所知,无论有没有字典,计算机算法在 100% 的情况下都不能可靠地解决这个问题。我建议放弃。或者使用字典进行非完美的方法(有字典比没有更好)

最重要的部分是汉字不是西方字母。汉字是与概念/想法相关联的符号,概念组合在一起指向具有(发音)与之相关联的词的特定对象。现在,汉字有常用读法列表(“on”/“kun”),但也有例外。

您的问题转化为:“给定与字母混合的通配符序列,将每个通配符与给定字符串中的字母序列匹配”。

例子:

猫に九生あり。-> +に++あり。</p>

这是您将立即遇到的困难。

  1. 你不能明确地将发音分成与某些汉字相关联的部分。对于像会社(かいしゃ)这样简单的事情,您可以使用算法来识别映射到音节的有效字母序列(您不能将 しゃ 分成两个不同的部分),但是您最终会遇到包含多个部分的单词或有特殊阅读。例:木阴(こかげ) 哪个字母属于哪个汉字?
  2. 单词/短语的模棱两可的拆分。即一个粒子可以是阅读的一部分。物の怪“もののけ” 现在,在这两个“不”中,哪个属于哪个汉字?
  3. 名称和程式化的外来词。前两个例子可以用字典来解决。名字需要特殊的字典(一树读作“kazuki”,虽然一没有“kazu”作为它的“on”或“kun”读法)。另一个很好的例子是死亡笔记中的八神之光,它有外来词“光”(ライト)写成月(月亮/月,通常读作つき/げつ)显然,月不读作“光”。至于外来语换句话说,“Slayers”中的火炎球(由主角)发音为“フャイヤーボール”(英文中的“fireball”),但显然汉字没有这些读法。

这些问题无法通过算法明确处理,因此将没有匹配字符串的算法。由于#2,LCS 和类似的例程将导致不正确的拆分。

要使用字典,您可以使用 edict 或 kanjidic 中的数据但是这并不能保证完美的解决方案。您可能还想调查“mecab”项目。

- 编辑 -

我认为 LCS 是获得它的算法之一,但它认为有时由于连续的平假名它可能会失败,那么有没有更好的算法来解决这个问题?

你不能用这种方式解决它。如果您只想将短语拆分为单词,则需要加载字典(15 多兆字节的数据)并根据字典检查单个单词,此外您还必须处理动词形式以在字典中定位单词。简单的通配符匹配在这里不起作用。

于 2013-09-23T09:42:36.370 回答
-1

我建议将汉字句子转换为正则表达式,如下所示:

regex = "(*)さくとも(*)で(*)しい(*)が"

因此,您正在将汉字的所有连续子字符串转换为 (*)。然后将该正则表达式与发音字符串匹配:

pronunciation = "しょうさくともけなげでびしいつきが"

如果它产生正匹配,大多数正则表达式库将能够告诉您“第 n 组括号中的文本是什么”。只需找到一个可以让您做到这一点的正则表达式库;事实上,如果没有这种能力,可能更难找到一个正则表达式库。

于 2013-09-23T07:23:17.987 回答