gpt4 book ai didi

c# - 什么是匹配字符串(段落)中大型短语词典中项目的有效方法

转载 作者:行者123 更新时间:2023-12-02 05:40:34 26 4
gpt4 key购买 nike

有没有办法通过 .Net 框架(或有人写过类似的东西)在传递字符串和字典对象时获取匹配数组?

首先是一些背景

我需要

我有运动队的 csv 文件,我将其加载到字典对象中,例如...

Team, Variants
Manchester United, Manchester United
Manchester United, manutd
Manchester United, man utd
Manchester United, manchester utd
Manchester United, mufc
Aston Villa, Aston Villa
Aston Villa, avfc
Newcastle United, Newcastle United
Newcastle United, toon army

现在我想看看一个字符串是否包含该词典中的任何短语。

一个示例字符串...

"I wonder if man utd, aston villa andthe toon army will exist in this string"

现在我要返回的是 n 个匹配的字符串数组,示例输出如下:

["Manchester United","Aston Villa", "Newcastle United"]

我目前正在使用正则表达式来拆分字符串中的单词。然后我循环遍历字符串中的每个单词并根据字典测试它(这里需要注意的是代码确实有效但只有单个单词而不是短语,这是由于正则表达式)

public static List<string> CheckStringWithDictionary(string input, Dictionary<string, string> dic, int minimumLength)
{
List<string>lst = new List<string>();
string myValue = "";
foreach (Match match in RegexSplitStringToArray(input, minimumLength))
{
if (dic.TryGetValue(match.Value, out myValue))
lst.Add(myValue);
}
return lst;
}

public static MatchCollection RegexSplitStringToArray(string input, int minLength)
{
Regex csvSplit = new Regex("(\\w{3,})", RegexOptions.Compiled);
return csvSplit.Matches(input);
}

循环字符串而不是字典的原因是因为字典将包含 10,000 多个项目,因此循环遍历它的效率非常低。

感谢您到目前为止的耐心等待,现在来回答这个问题......

有没有办法通过 .Net 框架(或有人写过类似的东西)在传递字符串和字典对象时获取匹配数组?

谢谢大家

最佳答案

我会为此使用 LINQ:

 string input = "I wonder if man utd, aston villa andthe toon army will exist in this string";
List<string> matches = dic.
.Where(kvp => input.Contains(kvp.Key))
.Select(kvp => kvp.Value)
.ToList();

这仍然有效地遍历字典,但如果您需要处理多个单词选项,即使使用大型字典,这也可能比大多数替代方案更好。

关于c# - 什么是匹配字符串(段落)中大型短语词典中项目的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11037296/

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