c# - 将大字符串中的子字符串匹配到大量关键字列表的最佳方法是什么

标签 c# regex lookup string-matching named-entity-recognition

假设您有数百万条记录,其中包含平均 2000 个单词(每条)的文本,并且您还有一个包含大约 100000 个项目的其他列表。

例如:在关键字列表中,你有一个像“奥巴马总统”这样的项目,在一个文本记录中,你有这样的东西:“......奥巴马总统......”,所以我想在文本中找到这个关键字并将其替换为这样的东西:“..... {president Obama} ....”以突出文本中的关键字,关键字列表包含多名词词,如示例。

在如此庞大的包含数百万文本记录的列表中,最快的方法是什么?

注意事项:

  1. 现在我用贪婪的方式做这个工作,逐字检查并匹配它们,但是每条文本记录大约需要 2 秒,我想要一些接近零时间的东西。

    <
  2. 此外,我知道这类似于命名实体识别,我使用过许多 NER 框架,例如 Gate 和...,但因为我想将其用于框架不支持的语言我想手动执行此操作。

最佳答案

假设:大多数关键词是单词,但也有一些多词关键词。

我的建议。

根据第一个词散列关键字。所以“President”、“President Obama”和“President Clinton”都将散列为相同的值。

然后通过计算哈希值逐字搜索。哈希匹配实现逻辑以检查您是否匹配多词关键字。

计算哈希将是该解决方案中成本最高的操作,并且应该与输入字符串的长度成线性关系。

关于c# - 将大字符串中的子字符串匹配到大量关键字列表的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20211380/

相关文章:

c# - 如何更改datagridview的值?

java - 使用模式匹配器提取html

python - 如何在 Regex.Replace 中执行此操作?

sql-server - 将两个源映射到目标 SQL DB 表

c# - 如何使用 C# 复制 Access 表

c# - 如何在自定义 session 状态提供程序中将 session 数据转换为 SessionStateStoreData 类型

c# - 执行 client.SendAsync 时出现 HttpRequestException

python - 使用正则表达式或常规 Python 进行字符串替换?

json - 使用 JQ 扩展对 JSON 中同级值的引用

Java 对象而不是在数据库中查找