gpt4 book ai didi

javascript - 在文本中查找关键字

转载 作者:行者123 更新时间:2023-12-03 23:25:47 32 4
gpt4 key购买 nike

我有一个数组,其中包含已发生的事件,这些事件是用自由文本编写的,因此除了某些关键字外没有遵循某种模式,例如。 “抢劫”、“凶手”、“入室行窃”、“车祸”等。这些关键字可以在文本中的任何位置,我想找到这些关键字并将它们添加到类别中,例如。 “抢劫”。

最后,当我检查了所有事件后,我想要一个这样的类别列表:

Robberies: 14
Murder attempts: 2
Car accidents: 5
...

数组元素可以如下所示:

incidents[0] = "There was a robbery on Amest Ave last night...";
incidents[1] = "There has been a report of a murder attempt...";
incidents[2] = "Last night there was a housebreaking in...";
...

我想这里最好的办法是使用正则表达式来查找文本中的关键字,但我真的很不擅长正则表达式,因此在这里需要一些帮助。

下面的正则表达式不正确,但我想这种结构可行吗?有没有更好的方法来避免 DRY?

var trafficAccidents = 0,
robberies = 0,
...

function FindIncident(incident) {
if (incident.match(/car accident/g)) {
trafficAccidents += 1;
}
else if (incident.match(/robbery/g)) {
robberies += 1;
}
...
}

提前致谢!

最佳答案

以下代码显示了您可以采用的方法。你可以测试一下here

var INCIDENT_MATCHES = {
trafficAccidents: /(traffic|car) accident(?:s){0,1}/ig,
robberies: /robbery|robberies/ig,
murder: /murder(?:s){0,1}/ig
};

function FindIncidents(incidentReports) {
var incidentCounts = {};
var incidentTypes = Object.keys(INCIDENT_MATCHES);
incidentReports.forEach(function(incident) {
incidentTypes.forEach(function(type) {
if(typeof incidentCounts[type] === 'undefined') {
incidentCounts[type] = 0;
}
var matchFound = incident.match(INCIDENT_MATCHES[type]);
if(matchFound){
incidentCounts[type] += matchFound.length;
};
});
});

return incidentCounts;
}

正则表达式很有意义,因为您将拥有许多满足“匹配”标准的字符串,即使您只考虑“抢劫”的复数形式和单数形式的差异。您还希望确保您的匹配不区分大小写。

您需要在正则表达式上使用“全局”修饰符,以便匹配“Murder, Murder, murder”之类的字符串并将计数增加 3 而不是仅增加 1。

这使您可以将匹配条件和事件计数器之间的关系保持在一起。它还避免了对全局计数器的需要(授予 INCIDENT_MATCHES 在这里是一个全局变量,但您可以轻松地将其放在其他地方并将其从全局范围中取出。

关于javascript - 在文本中查找关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14248416/

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