这里是例如。
起源句子:小さくとも健気で美しい月が
发音:しょうさくともけなげでびしいつきが
我想得到汉字的解释,就像下面的
小:しょう
健気:けなげ
美:び
月:き
我认为LCS是获得它的算法之一,但它认为有时由于连续的平假名可能会失败,所以有没有更好的算法来解决这个问题?
justhal是对的,让我们将原始句子和发音句子视为字符串,所以我想要做的是将汉字与代词相匹配。
答案 0 :(得分:1)
//警告:请注意,我不是日语专家,而且还在学习它。
据我所知,这个问题不能通过计算机算法在有或没有字典的情况下100%可靠地解决。我建议放弃。或者使用字典进行非完美的方法(字典优于没有字典)
最重要的部分是汉字不是西方字母。汉字是与概念/概念相关联的符号,概念组合在一起指向某个具有与之关联的(可发音)单词的对象。现在,汉字有常用读数列表(“on”/“kun”),但也有例外。
您的问题转化为:“给定的通配符序列与字母混合,将每个通配符与给定字符串中的字母序列匹配”。
示例:
猫に九生あり.-> +に++あり。
以下是您遇到的困难。
这些问题不能通过算法明确处理,因此没有匹配字符串的算法。由于#2,LCS和类似的例程将导致错误的拆分。
要使用字典,您可以使用edict或kanjidic中的数据,但这并不能保证完美的解决方案。您可能还想调查“mecab”项目。
- 编辑 -
我认为LCS是获得它的算法之一,但它认为有时由于连续的平假名可能会失败,所以有没有更好的算法来解决这个问题?
你不能这样解决。如果您只想将短语分成单词,则需要加载字典(15+兆字节的数据)并根据字典检查单个单词,此外,您还必须处理动词形式以在字典中查找单词。简单的通配符匹配在这里不起作用。
答案 1 :(得分:1)
这似乎是一个比LCS更简单的问题,因为句子中的每个平假名必须出现在发音中。
让我们在句子中将一串平假名称为“h-string”。
如果句子中的h字符串与发音中的只匹配一个子字符串,那么我们可以分解问题。例如,这个:
[小* さくとも *健気で美しい月が]< => [しょう* さくとも *けなげでびしいつきが]
成为这个:
[小]< => [しょう]
[健気で美しい月が]< => [けなげでびしいつきが]
在这个例子中,这个过程就足够了,因为没有歧义;每个h-string在发音中只出现一次。我们必须考虑更难的案例。
我将用罗马字符替换平假名和汉字的序列,部分用于抽象,但主要是因为我不会说日语而不能用真正的日语句子作为例子。上一个例子变为:
[AwBCxDyEz]< => [swtxuyvz]
这容易发生故障:
一:■
BC:T
d:U
E:v
这个过程一直有效,直到我们遇到一个地图,其中所有的H字符串都是内部的,而且没有一个在发音中是唯一的:
[AyBzC]< => [yuzyvzyzwzyx]
现在我们必须考虑所有可能的匹配:
[余德耀的ý v 以Z yzwzyx]
[余德耀的ý vzy 以Z wzyx]
[余德耀的ý vzyzw 以Z YX]
[yuzyvz的ý ZW 以Z YX]
在这种情况下,算法必须报告{A,B,C}的4种可能发音。
答案 2 :(得分:-1)
我建议将汉字句子转换为正则表达式,如下所示:
regex = "(*)さくとも(*)で(*)しい(*)が"
所以你要将汉字的所有连续子串转换为(*)。然后将该正则表达式与发音字符串匹配:
pronunciation = "しょうさくともけなげでびしいつきが"
如果它产生肯定匹配,大多数正则表达式库将能够告诉你“第n组括号中的文本是什么”。只需找到一个可以让你这样做的正则表达式库;事实上,如果没有这种能力,找到一个正则表达式库可能会更难。