快速从句子中提取术语

时间:2012-07-19 09:31:47

标签: python mongodb nlp text-mining

我在Text Mining工作,我的工作重点是生物医学实体(基因,蛋白质,药物和疾病)。我想和你分享一些问题。

现在,我的目标是找到生物医学文本中的生物医学实体(来自Medline),通过术语词典,我可以识别找到的每个实体及其唯一标识符。

要存储文本,dicitionaries和结果,我使用的是MongoDB(非SQL数据库)。每个摘要都以句子分割,每个句子都存储在一个新记录中(带有令牌,块和词性标签的列表)。为了找到实体,我得到了所有的句子,并为每一个我为字典中的每个术语创建一个正则表达式(在Python中):

for term in dicitonary:
     matches = re.finditer(r'(' + term + ')', sentence)
     for m in matches:
          ini = m.start()
          end = m.end()
          result.append(ini, end, dictionary.get_identification[term])

但它确实很慢,我有几个150,000个摘要的子集(> 1,000,000个句子)。

对我来说,真正有趣的软匹配是提取更多实体,其术语不完全在我的字典中,但它可以增加我的运行时间。

我认为我的问题是为每个句子做很多正则表达式(我有300,000个条目的字典),因为我必须在句子中找到这些术语。没有机器学习算法,你怎么能解决这个问题?还有ML算法?现在,我可以灵活地改变我的编程语言,数据库......

非常感谢!!!

此致

ALEX。

1 个答案:

答案 0 :(得分:4)

不是每term构建一个RE,而是构建一个可以捕获所有RE的单个,分离的:

pattern = re.compile("(%s)" % "|".join(re.escape(term) for term in dictionary))

然后使用pattern.finditer

至于“如何使用机器学习”,这个问题太过广泛,恕我直言。最初通过谷歌搜索“生物医学命名实体识别” - 有大量关于该问题和各种工具的文献。