首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在与c#完全匹配的文本中查找所有关键字及其索引

在与c#完全匹配的文本中查找所有关键字及其索引
EN

Stack Overflow用户
提问于 2013-10-24 10:32:42
回答 4查看 1.2K关注 0票数 2

我有一个关键字列表和一个文本来搜索他们。我需要在文本中得到每个找到的关键字的开始索引,匹配必须是精确的。例如:

代码语言:javascript
复制
keywords=>cat,dog
text=> a catchy cat with a dogged dog

在这里,只有“猫”和“狗”匹配索引必须返回,匹配不应该与‘吸引’和‘狗’这样的词。

我试过一种用于字符串匹配的算法,但它也与“吸引人”和“固执”相匹配。如何准确匹配关键字并使用c#返回文本中的索引位置

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-10-24 10:36:22

用正则表达式表示边界..。

代码语言:javascript
复制
var results= keywords.Select(x=>
                               new
                               {
                                word=x,
                                indexes=Regex.Matches(input,@"\b"+x+@"\b")
                                             .Cast<Match>().Select(y=>y.Index)
                                             .ToList()    
                               }
                            );

现在可以对结果进行迭代。

代码语言:javascript
复制
foreach(var match in results)
{
    match.word;
    foreach(int index in match.indexes)//index
}
票数 3
EN

Stack Overflow用户

发布于 2013-10-24 11:16:42

你可以用Aho算法做一些修改。对于所有关键字,将单词分隔符(如空格、点、换行符等)附加到每个关键字的末尾。

因此,如果您有m个关键字,文本有n个类型的分隔符,那么您将从n*m单词构建trie树。

在附加分离器后,它将不匹配‘吸引’和‘坚持’在你的样品箱。

编辑:

首先,您最好对AC算法有一个了解。

示例:

keywords=>cat,text=>,一只带着狗狗的猫

现在更改关键字=>‘cat ',’狗','cat\n',‘狗\n’(只是附加空格和换行符)

更改文本=>‘一只带着狗狗的猫’

然后,您可以使用算法来查找每个关键字的每个索引。

假设文本长度为n,关键词总长度为m,则Aho算法具有O(n+m)复杂度,足以满足大文本和大关键字集的要求。

票数 1
EN

Stack Overflow用户

发布于 2013-10-24 11:21:12

希望下面的函数将返回每个关键字的索引列表。

代码语言:javascript
复制
private List<int> GetIndexForKeyWord(string content,string key)
{
    int index = 0;
    List<int> indexes=new List<int>();
    while (index < content.Length && index >= 0)
    {
        index = content.IndexOf(key, index);
        if (index+key.Length==content.Length||index >= 0 && !char.IsLetter(content[index + key.Length]))
        {
            indexes.Add(index);
        }
        if(index!=-1)
            index++;
    }
    return indexes;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19563495

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档