c# - 在 C# 中安全/惯用地提取子数组

标签 c# arrays string sub-array

我正在用 C# 构建一个自然语言处理器,我们数据库中的许多“词”实际上是指代一个名词或 Action 的多词短语。拜托,不要讨论这个设计电话,只要说它现在是不可改变的就够了。我有句子的相关词( block )的字符串数组,我需要测试这些短语和词。 处理子数组提取的适当惯用方法是什么,这样我就可以将出现溢出错误等的风险降到最低?

为了给出所需逻辑的示例,让我逐步运行一个样本 block 。出于我们的目的,假设数据库中唯一的多词短语是“quick brown”。

Full phrase: The quick brown fox -> encoded as {"The", "quick", "brown", "fox"}
First iteration: Test "The quick brown fox" -> returns nothing
Second iteration: Test "The quick brown" -> returns nothing
Third iteration: Test "The quick" -> returns nothing
Fourth iteration: Test "The" -> returns value
Fifth iteration: Test "quick brown fox" -> returns nothing
Sixth iteration: Test "quick brown" -> returns value
Seventh iteration: Test "fox" -> returns value

Sum all returned values and return.

我对如何解决这个问题有一些想法,但我看得越多,我就越担心数组寻址错误和其他类似的问题困扰着我的代码。该短语以字符串数组的形式出现,但我可以将其放入 IEnumerable。我唯一担心的是 Enumerable 缺少索引。

最佳答案

这听起来像是 Aho-Corasick 字符串匹配算法的完美应用。我有一本包含大约 1000 万个短语的字典,我在其中运行短字符串。它的速度快得令人难以置信。只需一次,它就会告诉您所有匹配的短语。因此,如果“the”、“fox”和“quick brown”都在字典中,则一次传递将返回所有三个索引。

这很容易实现。网上找原论文,一个下午就可以搭建起来。

Efficient String Matching: An Aid to Bibliographic Search

关于c# - 在 C# 中安全/惯用地提取子数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7070540/

相关文章:

c# - 使用 C# 设置功能保存密码时的最佳做法是什么?

python - 更改python中的字符串格式分隔符

python - 一种在 Python 中连接字符串中的字符列表的优雅方法

php - 我如何添加+号

javascript - 在javascript中移动对象内的元素

python - 如何将对象转换为数组

python - __repr__() 返回非字符串

javascript - MVC 从局部 View 调用函数不起作用

c# - 碰撞器调用 OnTriggerExit 未标记为触发错误 Unity

c# - 以编程方式从 Brushes 类中获取画笔?