在包含非字母字符的单词中检测音节

3

我正在实现可读性测试,并已经实现了检测音节的简单算法。 通过检测元音字母序列,我在单词中计数它们。例如,单词“should”包含一个元音序列,即“ou”。在计数之前,我会删除后缀,如-les、-e、-ed(例如,单词“like”包含一个音节但两个元音序列,所以这种方法是有效的)。

但是... 考虑这些单词/序列:

  • x-ray(它包含两个音节)
  • I'm(一个音节,也许我可以在文本中删除所有撇号?)
  • goin'
  • I'd've
  • n'(例如猪肉n'豆)
  • 3rd(如何处理?)
  • 12345

特殊字符怎么办?全部删除吗?对于大多数单词来说这样做没问题,但对于“n'”和“x-ray”就不行了。还有数字怎么办。

这些都是单词的特殊情况,但我很乐意在这个主题上看到一些经验或想法。

1个回答

1

我建议您首先确定您的数据中有多少这些单词,并且它对程序的整体性能有多大影响。还要编译一些最常出现的单词统计数据。

这个问题没有简单的正确解决方案,但我可以提供一些启发式算法:

  • 介于两个辅音之间的 ' (例如 shouldn't)似乎标志着一个音节的省略
  • 有元音或者单词边界的 ' (例如 I'd, goin')似乎不会省略(但请注意,goin' 仍然由两个音节组成)
  • 包括 n' 在内的所有单词至少有一个音节
  • 破折号(-)可以通过将其两侧的文本视为单独的单词来处理

3rd 可以通过编写将序数转换为单词的代码或者通过更简单的启发式算法来处理。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接