Я заинтересован в проверке или автоматической корректировке использования неопределенных статей "a" и "an" в блоках английского текста с textarea
.
Грамматическое правило состоит в том, что выбор статьи зависит от звука, который начинается с следующего слова. Подробности здесь и здесь. Это кажется невероятно широким, однако в предыдущем ответе было высказано предположение (Как я могу правильно прикрепить слово с символом "a" и "a" ??) до ссылайтесь на огромную базу данных английского текста, чтобы создать эвристику, чтобы вывести правильную неопределенную статью для использования в данной ситуации. Eamon Nerbonne комментирует, что он это сделал, поэтому как я могу применить это решение для этой практической реализации?
Функция, которую я до сих пор реализует простейшей частью грамматического правила; он использует , когда следующее слово начинается с гласного, а a. Он также учитывает существующую капитализацию статьи. Однако в реальности это нецелесообразно, поскольку исключения из этого правила очень распространены. Например, "лошадь" правильная, а "честь" и "HTTP-адрес" - нет.
Как моя функция может быть расширена, чтобы правильно обрабатывать фактическое произношение слов, следующих за статьями, включая тихие буквы, акронимы и "иногда-y"? Я не требую 100% -ной точности - лучше, чем 80%, будет достаточно, чтобы улучшить текст, который я исправляю.
Здесь моя функция fixArticles()
; см. фрагмент для приведенного примера.
function fixArticles( txt ) {
var valTxt = txt.replace(/\b(a|an) (\w*)\b/gim, function( match, article, following ) {
var newArticle = article.charAt(0);
switch (following.charAt(0).toLowerCase()) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
newArticle += 'n'; // an
break;
default:
// a
break;
}
if (newArticle !== article) {
newArticle = "<span class='changed'>" + newArticle + "</span>";
}
return newArticle+' '+following;
});
document.getElementById('output-text').innerHTML = valTxt.replace(/\n/gm,'<br/>');
}
function fixArticles( txt ) {
var valTxt = txt.replace(/\b(a|an) (\w*)\b/gim, function( match, article, following ) {
var newArticle = article.charAt(0);
switch (following.charAt(0).toLowerCase()) {
case 'a':
case 'e':
case 'i':
case 'o':
case 'u':
newArticle += 'n'; // an
break;
default:
// a
break;
}
if (newArticle !== article) {
newArticle = "<span class='changed'>" + newArticle + "</span>";
}
return newArticle+' '+following;
});
document.getElementById('output-text').innerHTML = valTxt.replace(/\n/gm,'<br/>');
}
input, label {
display:block;
}
.changed {
font-weight: bold;
}
<label for="input-text">Enter text</label>
<textarea id="input-text" cols="50" rows="5">An wise man once said: "A apple an day keeps the doctor away."
Give me an break.
I would like an apple.
My daughter wants a hippopotamus for Christmas.
It was an honest error.
Did a user click the button?
An MSDS (material safety data sheet) was used to record the data.
</textarea>
<input type="button" value="Fix a/an" onClick="fixArticles(document.getElementById('input-text').value)">
<hr>
<div id="output-text"/>