我想从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、血管紧张素转换酶、AGTR1和ADD1的多态性与二甲双胍的降糖反应之间存在显著的相关性。
这段代码返回了很多句子,也就是说,如果上面的一个词出现在打印出来的句子中…!帮我写这段代码
发布于 2016-11-16 17:37:11
您没有显示真实的代码,但是您现在拥有的代码至少有一个错误,这将导致大量虚假输出。它在这一行上:
re.findall("\w+\s?[gene]+", a)此正则表达式不匹配包含gene的字符串,这显然是您想要的。它匹配(几乎)任何包含字母g、e或n之一的字符串。
这不可能是您真正的代码,因为a是一个列表,您会在该行得到一个错误--而且您忽略了findall()的结果!理清你的问题,让它反映现实。如果您的问题仍未解决,请编辑您的问题,并至少包括一句是输出的一部分但您不希望看到的句子。
发布于 2016-11-16 17:17:18
执行此操作时:
if value.find("SLC22A1") != -1 and value.find("Metformin"):你可能想要这个:
if value.find("SLC22A1") != -1 and value.find("Metformin") != -1:由于返回值的原因,这个find方法很容易出错,而且您不关心位置,所以最好使用in。
if "SLC22A1" in vlow and "metformin" in value.lower():发布于 2016-11-16 17:48:59
我会采取一种不同的方法:
只要你的文本文件格式良好,这应该是可行的。
https://stackoverflow.com/questions/40583530
复制相似问题