当前位置: 首页 > 知识库问答 >
问题:

按单词匹配搜索重复项

孔彭祖
2023-03-14

我在列表中有这样的数据:

Microsoft Ltd
Microsoft
Google Inc
Amazon Ltd.
Amazon Ltd.
DropBox Corporation Ltd.
DropBox Corporation

我当前的解决方案能够检测到完全匹配的重复项。因此,它当前将输出:

Amazon Ltd.
Amazon Ltd.

我想增加一些可能性,以便它们也在输出列表中:

Microsoft Ltd
Microsoft
Amazon Ltd.
Amazon Ltd.
DropBox Corporation Ltd.
DropBox Corporation

下面是我当前的代码:

var dups = companyList.AsEnumerable()
.Where(g => !string.IsNullOrWhiteSpace(g.Name))
.GroupBy(dr => dr.Name.Trim())
.Where(gr => gr.Count() > 1)
.SelectMany(g => g)
.OrderBy(c => c.Name)
.ToList();

我将非常感谢任何善意的建议,以导致实现这种检查的解决办法?我个人认为这里没有任何可能的合乎逻辑的解决办法?也许只是某种基于分数的Levenshtein距离计算和检测?如果这是不可能的,将是有益的,至少得到这些(匹配多个单词,例如两个):

DropBox Corporation Ltd.
DropBox Corporation

共有1个答案

谢英光
2023-03-14

你可以通过删除标点符号和诸如“inc”、“corp”之类的单词(参见下面的部分示例),以及删除括号来完成一定数量的“规范化”,但最终这是一个非常困难的问题,因为(i)缩写;㈡地点说明(东部、北部、..);(iii)公司分类:它是一个子公司、一个分公司、一个特许经营商,还是一个单独的公司?

最终,一个同义词列表可能是最好的方法,再加上一些轻微的规范化,以去除常见的公司实体类型名称。

    private static string Clean(string corporation)
    {
        corporation = corporation.EndsWith("Inc") ? corporation.Substring(0, corporation.Length - 3) : corporation;
        return corporation
            .Replace(" LLC", "")
            .Replace(" S.A.", "")
            .Replace(" SA", "")
            .Replace(" S.L.", "")
            .Replace(" SL", "")
            .Replace("(1)", "")
            .Replace(" GmbH", "")
            .Replace("(UK) Ltd.", "")
            .Replace(" Limited", "")
            .Replace(" Corporation", "")
            .Replace(" Corp.", "")
            .Replace(" Corp ", " ")
            .Replace(" Ltd.", "")
            .Replace(" Ltd", "")
            .Replace(" Inc.", "")
            .Replace("(Pa)", "")
            .Replace(" Inc ", " ")
            .Replace(" Corporation", "")
            .Replace(", LLP.", "")
            .Replace(" N.V.", "").Trim();
    }
 类似资料:
  • 问题内容: 我想搜索包含许多单词的字符串,并检索与其中任何一个匹配的文档。我的索引方法如下: 这是我的搜索方法。我不想寻找特定的词组,但是其中的任何单词。用于搜索的分析器与用于索引的分析器相同。 我是Lucene的新手。有人可以帮我吗? 问题答案: 使用会精确地尝试将短语“单词列表”与短语坡度0匹配。 如果要匹配单词列表中的 任何 术语,可以使用: 或者,您也可以使用,以便您可以要求查询词的数量的

  • 我正在尝试执行一个bash文件,该文件执行以下操作: 从文件夹中,仅提取文件名中包含干净单词的文件夹。 从这些中,如果其中有一个1,那么取那个和下面的。 现在,我站在这一点上: 我对if语句有问题,因为我不知道如何表达它 谢谢

  • 问题内容: 我正在执行模糊搜索,需要查看匹配的单词。例如,如果我正在搜索查询,并且它使该字段与句子匹配,则我需要能够知道匹配是由于单词引起的。 我尝试设置参数,但似乎未包含我需要的信息。有什么想法吗? 问题答案: 好吧,这就是我想要的: 经过一些研究,我发现了elasticsearch的突出功能。 默认情况下,它返回匹配项周围的上下文片段,但是您可以将片段大小设置为查询长度,以仅返回完全匹配项。例

  • 我有以下正则表达式代码 我希望比赛包括: word1 word2 word3关键字word4 word5 word6 word4 word5 word6关键字word7 word8 word9 但实际上,我得到的是: word1 word2 word3关键字word4 word5 word6 关键字word7 word8 word9 换句话说,第二场比赛因第一场比赛而被裁切。 这是一个测试:htt

  • 给出一个二维板和字典中的单词列表,找出板中的所有单词。 每个单词必须由顺序相邻单元格的字母构成,其中“相邻”单元格是那些水平或垂直相邻的单元格。同一个字母单元格在一个单词中不能使用不止一次。 例如,给定单词和board= 回归[“吃”“誓”]

  • 试图让搜索按我需要的方式进行。。。目前,我使用StandardAnalyzer()将数据分析到索引中,然后使用QueryParser()和Query()并执行。。。如果文档中有“可疑”一词,搜索“可疑”,我会在其中找到我的文档,但如果搜索“可疑”,我不会得到任何结果。。。所以我的问题是,我想对我的搜索实现词干分析或更好的查询。。。我知道你会得到SnowBallaAnalyzer用于堵塞,但它在Lu