gpt4 book ai didi

javascript - 替换文本输入中错误使用的 "a"和 "an"

转载 作者:可可西里 更新时间:2023-11-01 02:26:49 24 4
gpt4 key购买 nike

我有兴趣验证或自动更正 textarea 中英文文本 block 中不定冠词“a”和“an”的使用。

语法规则是冠词的选择取决于下一个单词的开头音。详情 herehere .这看起来非常广泛,但是在之前的答案 ( How can I correctly prefix a word with "a" and "an"? ) 中有人建议引用一个巨大的英文文本数据库来创建启发式方法来推断在给定情况下使用的正确不定冠词。 Eamon Nerbonne 评论说他已经做到了这一点,那么我如何才能将该解决方案应用到这个实际实现中呢?

到目前为止,我的函数实现了语法规则中最简单的部分;当后面的单词以元音开头时,它使用 an,否则使用 a。它还尊重文章的现有大写。但是,在实际使用中,这是不切实际的,因为该规则的异常(exception)情况非常普遍。例如,“一匹马”是正确的,而“一种荣誉”和“一个 HTTP 地址”则不是。

如何扩展我的函数以正确处理文章后面单词的实际发音,包括无声字母、首字母缩略词和“sometimes-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"/>

样本输入的预期输出是:

A wise man once said: "An apple a day keeps the doctor away."
Give me a 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.

最佳答案

继对 How can I correctly prefix a word with "a" and "an"? 的轻率回答之后, Eamon Nerbonne 遵循了给定的建议并产生了一种有效的算法,可以准确地识别在任何后续文本之前使用的正确不定冠词。所以感谢@JayMEE 的指点,它确实有帮助。

算法的实现超出了基本问答的范围 - 您可以在 Eamon 的 blog entry 中阅读相关内容。和 GitHub repository .但是,它使用起来非常简单!

这里是如何修改 fixArticles() 以使用 Eamon 代码的简单压缩版本,AvsAn-simple.min.js .查看JSFiddle Demo .

function fixArticles(txt) {
var valTxt = txt.replace(/\b(a|an) ([\s\(\"'“‘-]?\w*)\b/gim, function(match, article, following) {
var input = following.replace(/^[\s\(\"'“‘-]+|\s+$/g, ""); //strip initial punctuation symbols
var res = AvsAnSimple.query(input);
var newArticle = res.replace(/^a/i, article.charAt(0));
if (newArticle !== article) {
newArticle = "<span class='changed'>" + newArticle + "</span>";
}
return newArticle + ' ' + following;
});

document.getElementById('output-text').innerHTML = valTxt.replace(/\n/gm, '<br/>');
}

关于javascript - 替换文本输入中错误使用的 "a"和 "an",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34440307/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com