首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从句子中快速提取术语

从句子中快速提取术语
EN

Stack Overflow用户
提问于 2012-07-19 17:31:47
回答 1查看 546关注 0票数 2

我从事文本挖掘工作,我的工作重点是生物医学实体(基因、蛋白质、药物和疾病)。我想和大家分享一些问题。

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

为了存储文本、字典和结果,我使用了MongoDB (一个nonSQL数据库)。每个摘要被分割成句子,每个句子被存储在一个新的记录中(带有标记、块和词性标签的列表)。为了查找实体,我获取所有句子,并为每个句子在字典中为每个术语创建一个常规表达式(在Python中):

代码语言:javascript
复制
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算法呢?现在,我可以灵活地改变我的编程语言,数据库...

非常感谢!

致以敬意,

萨莱克斯。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-19 17:38:10

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

代码语言:javascript
复制
pattern = re.compile("(%s)" % "|".join(re.escape(term) for term in dictionary))

然后使用pattern.finditer

至于“如何使用机器学习”,这是一个过于宽泛的问题。首先用谷歌搜索“生物医学命名实体识别”--有大量关于这个问题的文献和各种工具。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11557863

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档