我想从10,000篇文章中提取含有药物和基因名称的句子

时间:2016-11-14 07:10:42

标签: python-3.x nltk sentence-similarity

我想从10,000篇文章中提取含有药物和基因名称的句子。 我的代码是

import re
import glob
import fnmatch
import nltk
from nltk.tokenize import sent_tokenize, word_tokenize


flist= glob.glob ("C:/Users/Emma Belladona/Desktop/drug working/*.txt")
print (flist)
for txt in flist:
    #print (txt)
    fr = open (txt, "r")
    tmp = fr.read().strip()
    a = (sent_tokenize(tmp))
    b = (word_tokenize(tmp))
    for c, value in enumerate(a, 1):
        if value.find("SLC22A1") != -1 and value.find("Metformin"):
            print ("Result", value)
            re.findall("\w+\s?[gene]+", a)
        else:
            if value.find("Metformin") != -1 and value.find("SLC22A1"):
                print ("Results", value)
        if value.find("SLC29B2") != -1 and value.find("Metformin"):
            print ("Result", value)

我想从整篇文章中提取具有基因和药物名称的句子。例如,“二甲双胍减少了对数转换的SLC22A1排泄(从1.5860.47到1.0060.52,p = 0.001)。” “总之,在这项控制良好的研究中,我们无法证明所研究的SLC22A1,ACE,AGTR1和ADD1基因多态性与二甲双胍的抗糖尿病反应之间存在显着关联。”

这段代码会返回很多句子,如果上面的一个单词出现在打印出来的句子中......! 帮我制作一下这个代码

3 个答案:

答案 0 :(得分:1)

您不会显示您的真实代码,但您现在拥有的代码至少有一个会导致大量虚假输出的错误。它就在这条线上:

re.findall("\w+\s?[gene]+", a)

此正则表达式与包含gene的字符串不匹配,正如您明确指出的那样。它匹配(几乎)任何字符串包含字母gen之一。

这可能不是您的真实代码,因为a是一个列表,您会在此行中收到错误 - 而且您会忽略findall()的结果!整理你的问题,以反映现实。如果您的问题仍然无法解决,编辑您的问题并至少包含一句话是输出的一部分,但您不希望看到。

答案 1 :(得分:0)

执行此操作时:

if value.find("SLC22A1") != -1 and value.find("Metformin"):

您正在测试字符串中的"SLC22A1"Metformin"不在字符串的开头(第二部分可能不是您想要的)

你可能想要这个:

if value.find("SLC22A1") != -1 and value.find("Metformin") != -1:

find方法由于其返回值而容易出错,并且您不关心该位置,因此您最好使用in

要测试一个句子中的2个单词(可能对第2次出现不区分大小写),请执行以下操作:

if "SLC22A1" in vlow and "metformin" in value.lower():

答案 2 :(得分:0)

我采取了不同的方法:

  1. 读入文本文件
  2. 将文本文件拆分为句子。查看https://stackoverflow.com/a/28093215/223543以获得手动方法来执行此操作。或者您可以使用ntlk.tokenizer.punkt模块。 (在Alexis在下面的评论中指出我正确的方向后编辑。)
  3. 检查我是否在每个句子中找到您的关键术语,如果我这样做则打印。
  4. 只要您的文本文件格式正确,这应该可行。