python - 快速从句子中提取术语

标签 python mongodb nlp text-mining

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

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

为了存储文本、字典和结果,我使用 MongoDB(一种非 SQL 数据库)。每个摘要都被分成句子,每个句子都存储在一个新记录中(带有标记、 block 和词性标签的列表)。为了查找实体,我获取了所有句子,并为每个句子创建了字典中每个术语的正则表达式(在 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 个条目的字典),因为我必须找到句子中的术语。如果没有机器学习算法,你怎么能解决这个问题呢?那么机器学习算法呢?现在,我可以灵活地改变我的编程语言、数据库......

非常感谢!!!

问候,

亚历克斯。

最佳答案

不要为每个术语构建一个 RE,而是构建一个可以捕获所有术语的单一、分离的 RE:

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

然后使用pattern.finditer

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

关于python - 快速从句子中提取术语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11557863/

相关文章:

python - Set 和 set 有区别吗?

node.js - MongoDB Mongoose 子文档创建了两次

machine-learning - 机器学习中如何知道分类结果更接近哪个类

python - spaCy中如何获取token的BILUO标签?

python - 无法使用Python从视频文件中获取正确的Exif数据

python - mysql表中插入数据的查询包含外键

python - 我想在代码上有一个 'else' 语句,使用 'for' 和 'if' 语句迭代列表以查找作为字典键的项目

mongodb - 如何使用 JUJU 登录/使用已部署的服务

python - 使用 MongoDB 聚合框架进行不同的排序和分组

tensorflow - 减少 CNN (Conv1D) 文本分类模型中的误报