python - 语义搜索-从一堆文本文件中检索与传入的搜索词组非常匹配的句子

标签 python elasticsearch search nltk semantics

我有一堆文本文件。我的应用程序要求是搜索在语义上与我通过的搜索短语匹配的句子(或段落)。

例如:让我们说一句话“快速的棕色狐狸跳过了懒狗”。

我希望以下搜索短语可以搜索我的文本文件并列出上面的句子(有时与上一句话和下一句话一起显示上下文)

  • 狐狸
  • 狐狸跳过狗
  • 布朗狐狸(在此注意拼写错误)

  • (这通常是他们所说的在专利搜索站点中用于基于搜索短语-语义搜索来识别专利的内容)

    为了实现-我查了一下互联网,发现的是:
  • 使用nltk python库中的句子标记器将文本文件分解为句子:

  • from nltk.tokenize import sent_tokenize 
    f = open("fileName")
    mytext = f.readline()
    sent_tokenize(mytext)
    

  • 需要一个等效的 flex 搜索匹配功能,通过上述传递搜索短语实际上可以找到我要查找的句子。

  • enter image description here

    请建议我使用一个库同时实现1和2的简单方法。该应用程序仅在我的计算机上本地运行。

    最佳答案

    依存关系:

    pip install autocorrect
    
    代码(search.py​​):
    from autocorrect import spell
    def lcs(X, Y):
        mat = []
        for i in range(0,len(X)):
            row = []
            for j in range(0,len(Y)):
                if X[i] == Y[j]:
                    if i == 0 or j == 0:
                        row.append(1)
                    else:
                        val = 1 + int( mat[i-1][j-1] )
                        row.append(val)
                else:
                    row.append(0)
            mat.append(row)
        new_mat = []
        for r in  mat:
            r.sort()
            r.reverse()
            new_mat.append(r)
        lcs = 0
        for r in new_mat:
            if lcs < r[0]:
                lcs = r[0]
        return lcs
    def spellCorrect(string):
        words = string.split(" ")
        correctWords = []
        for i in words:
            correctWords.append(spell(i))
        return " ".join(correctWords)
    def semanticSearch(searchString, searchSentencesList):
        result = None
        searchString = spellCorrect(searchString)
        bestScore = 0
        for i in searchSentencesList:
            score = lcs(searchString, i)
            if score > bestScore:
                bestScore = score
                result = i
        return result
    
    
    result = semanticSearch("fox jump over dog", ["The quick brown fox jumped over the lazy dog", "This is one more string which contains fox bron"])
    print result
    

    关于python - 语义搜索-从一堆文本文件中检索与传入的搜索词组非常匹配的句子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47605377/

    相关文章:

    ruby - Logstash:输出到Elasticsearch会导致Ruby出错,但可与stdout一起使用

    migration - Elasticsearch 数据迁移

    search - 自治|偶像搜索API

    java - 如何打印计算机为二进制搜索所做的数学运算

    python - 限制来自任何给定 IP 地址的请求数量

    python - 在 Python 中将 Excel 或 CSV 文件转换为电子邮件地址列表

    python - Paramiko scp 从远程机器正则表达式复制

    python - 将 Series 传递给 Series.map() 时的 NaN 值

    elasticsearch - 如何在Logstash中使用过滤器设置1:N工作流程?

    algorithm - 10 个元素的二进制搜索复杂度是 0(log 10) = 1 ,但所需的比较是 4