我正在寻找一个完全准确的算法来计算单词中的音节。我在研究时发现的东西是不一致的,或者我知道会产生不正确的结果。有没有人对如何实现这一目标有任何建议?谢谢。
我现在使用的算法:
- 计算单词中元音的个数。
- 不计算双元音(“rain”有 2 个元音但只有 1 个音节)
- 如果单词的最后一个字母是元音不算(“边”是1个音节)
我还缺少其他规则吗?如果我使用的算法或我的实现是错误的,我会尝试在测试中确定我的错误结果。
最佳答案
Ambiguity是自然语言处理中的一个大问题,但有些任务实际上可以非常准确地处理歧义。原来音节是其中之一,所以不要听其他答案。 :)
音节化
基于启发式
你可以想出算法 achieving correct syllabification virtually throughout the English vocabulary , 但正确编程似乎很复杂。
基于语料库
一如既往,当手工算法没有太大帮助时,自然语言处理研究人员使用手工标记的语料库,其中包含给定单词的正确答案。然后使用学习算法,通常可以提供很高的准确性。您可以使用 LingPipe's syllabification (see "English syllabification")遵循这种方法。
详尽列表
英语只有这么多单词,这就是我们想出字典的方式。这样的词典通常包含正确的音节。你可以抓取 reference.com。例如,undulate entry包含«un·du·late»,足以知道有三个音节。
其他此类词典包括 Answers.com , The Free Dictionary , Merriam-Webster , 等等。请务必阅读条款和条件,可能不允许自动检索。而不同的词典不会always agree彼此。
它对新词或专有名词没有帮助,但我会说这将是最准确的方法。
关于断字
另一个相关的问题得到了更多的关注:断字。但是不要用那个!用于排版程序such as LaTeX ,但仅旨在提供一些正确的连字符,而不会提供不正确的连字符(高精度,低召回率)。有趣的是,只有 14 个异常(exception),例如。根据词性(动词或名词)具有不同连字符的项目。
断字程序
如果您认为它足以满足您的需要,请注意 few implementations of the TeX hyphenation algorithm exist in other languages, such as Python, Perl or Ruby .
关于string - 计算单词中的音节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9096228/