0

所以我尝试编写一个脚本,将转向aan必要时)。这比我想象的要难。

var txt = "This is a apple.";

var pos = txt.search(/a\s[aeiou]/i);
txt = pos != -1 ?
      txt.substring(0,pos+1) + "n" + txt.substring(pos+1,txt.length) :
      txt;
//"This is an apple."

它正在工作,但是当我尝试时"There are 60 minutes in a hour.",它并没有an因为正则表达式而改变。所以我改变了它:

var pos = txt.search(/a\s([aeiou]|hour)/i);

现在它正在工作(至少“小时”)。但是现在如果我放"There are people in a university.",它会变成an university,这是不正确的。

那么,有没有一个正则表达式可以涵盖英语中使用aand的规则呢?an谢谢!

4

1 回答 1

2

不久前在 StackOverflow 上有一个非常好的帖子:如何正确地为单词添加“a”和“an”前缀?

基本上共识是,最好的方法是从一个大型数据集进行学习,其次是一个发音词典,例如为语音合成而设计的 CMU dict。

举一个 CMU dict 的例子:

University comes out as:
Y UW N AH V ER S AH T IY . 

Umbrella is rendered as:
AH M B R EH L AH . 
于 2012-06-08T23:35:27.130 回答