'difficult' 确定 python 中 2 个字符串之间的接近度



我有两个字符串loss of geneaquaporin protein。在一行中,我想找出这两个是否存在于我的文件的一行,在5个单词的范围内。有什么想法吗?我找了很多遍,但什么也找不到。此外,由于这些是多单词字符串,我不能对这两个字符串使用abs(array.index)(这在单个单词中是可能的)。

感谢

您可以尝试以下方法:

  1. 首先,通过将文本转换为小写,只保留字符并在每个单词之间强制使用一个空格来净化文本。

  2. 接下来,在结果文本中搜索每个短语,并记下匹配短语的起始索引和长度。对此索引列表进行排序。

  3. 接下来,通过确保所有找到的索引都不是-1,确保所有短语都出现在文本中。

  4. 如果全部找到,则计算第一个短语结尾和最后一个短语开头之间的单词数。要做到这一点,从第一个短语的结尾到第二个短语的开头取一个文本片段,并将其拆分为单词。

脚本如下:

import re
text = "The  Aquaporin protein, sometimes  'may' exhibit a big LOSS of gene."
text = ' '.join(re.findall(r'b(w+)b', text.lower()))
indexes = sorted((text.find(x), len(x)) for x in ['loss of gene', 'aquaporin protein'])
if all(i[0] != -1 for i in indexes) and len(text[indexes[0][0] + indexes[0][1] : indexes[-1][0]].split()) <= 5:
    print "matched"

为了将其扩展到使用短语列表的文件,可以使用以下方法:

import re
log = 'loss of gene'
phrases = ['aquaporin protein', 'another protein']
with open('input.txt') as f_input:
    for number, line in enumerate(f_input, start=1):
        # Sanitise the line
        text = ' '.join(re.findall(r'b(w+)b', line.lower()))
        # Only process lines containing 'loss of gene'
        log_index = text.find(log)
        if log_index != -1:
            for phrase in phrases:
                phrase_index = text.find(phrase)
                if phrase_index != -1:
                    if log_index < phrase_index:
                        start, end = (log_index + len(log), phrase_index)
                    else:
                        start, end = (phrase_index + len(phrase), log_index)
                    if len(text[start:end].split()) <= 5:
                        print "line {} matched - {}".format(number, phrase)
                        break

这将为您提供以下类型的输出:

line 1 matched - aquaporin protein
line 5 matched - another protein

注意,这将只发现每行一个短语对。

我不完全确定这是否是你想要的,但我会试一试!

在Python中,可以使用"In"来检查一个字符串是否在另一个字符串中。我假设你已经有一种方法来存储文件中的一行:

"loss of gene" in fileLine -> returns boolean (either True or False)

有了这个,你可以从文件中检查"基因丢失"one_answers"水通道蛋白"是否在你的行中。一旦你确认他们都在那里,你可以通过将文本行拆分成一个列表来检查他们的接近程度,如下所示:

wordsList = fileLine.split()

如果在您的文本文件中有字符串:

"水通道蛋白有时可能表现出基因缺失"

拆分后变成:

["The","aquaporin","protein","sometimes","may","exhibit","a","loss","of","gene"]

我不确定这是否是一个有效的句子,但为了举例,让我们忽略它:p

一旦你将文本行拆分为单词列表,并确认单词在其中,你就可以使用python中列表附带的索引函数来获取它们的接近度!

wordsList.index("protein") -> returns index 2

在找到"蛋白质"的指数后,你可以检查"损失"的指数,然后减去它们,看看它们是否在5个单词的范围内。

你可以使用指数函数来辨别"基因缺失"是在"水通道蛋白"之前还是之后。如果"基因缺失"排在第一位,则索引"基因"one_answers"水通道蛋白"并减去这些索引。如果"水通道蛋白"排在第一位,则索引"蛋白质"one_answers"损失"并减去这些索引。

如果单词的顺序不同,你必须做更多的工作来确保正确地减去索引,但这应该涵盖了问题的实质。祝Chahat好运!

相关内容

  • 没有找到相关文章

最新更新