繁体   English   中英

如何通过字符串中的单个单词匹配提取整个句子?

[英]how to extract a whole sentence by a single word match in a string?

因此,我得到了一个完整的字符串(大约1万个字符),然后在该字符串中搜索一个单词(或多个单词)。 使用regex(word).Matches(scrappedstring)

但是,如何提取包含该单词的整个句子。 我正在考虑在搜索到的单词之后使用子字符串,直到第一个点/感叹号/问号/等。 但是,如何在搜索到的单词之前占句子的一部分呢?

也许有更好的逻辑?

如果您的界限是例如. ! ? ; ,匹配[^.!?;]*(wordmatch)[^.!?;]*表达式中的所有句子。 它将在内部给出所有具有所需单词匹配的句子。

例:

var s = "First sentence. Second with wordmatch ? Third one; The last wordmatch, EOM!";
var r = new Regex("[^.!?;]*(wordmatch)[^.!?;]*");
var m = r.Matches(s);

var result = Enumerable.Range(0, m.Count).Select(index => m[index].Value).ToList();

您可以在句子结尾处(点/感叹号/问号/等)之间获取子字符串,并在循环内搜索每个句子中的单词。

找到匹配的单词后,返回子字符串。

拥有职位后,您将继续阅读下一个. ,或文件的末尾..,但您还需要从单词的开头向后读一个. 或文件的开头。 这两个位置意味着您可以提取句子。

请注意,它不是万无一失的……如上面概述的最简单的形式, eg这意味着句子在g.之后开始g. 事实并非如此。

从输入中提取情感。 然后在每个情感中搜索指定的单词。 返回存在单词的情感。

    public List<string> GetMatchedString(string match, string input)
    {
        var sentanceList = input.Split(new char[] { '.', '?', '!' });
        var regex = new Regex(match);
        return sentanceList.Where(sentance => regex.Matches(sentance,0).Count > 0).ToList();
    }

您可以使用2个步骤进行处理。

首先,您将短语分段,然后过滤每个包含单词的单词。

像这样的东西:

var input = "A large text with many sentences. Many chars in a string!. A sentence without the pattern word.";

//Step 1: fragment phrase.
var patternPhrase = @"(?<=(^|[.!?]\s*))[^ .!?][^.!?]+[.!?]";

//Step 2: filter out only the phrases containing the word.
var patternWord = @"many";

var result = Regex
    .Matches(input, patternPhrase) // step 1
    .Cast<Match>()
    .Select(s => s.Value)
    .Where(w => Regex.IsMatch(w, patternWord, RegexOptions.IgnoreCase)); // step 2

foreach (var item in result)
{
    //do something with any phrase.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM