【发布时间】:2020-12-26 06:41:04
【问题描述】:
我的任务是使用以下规则在医学文本中查询机构名称:
[{'ENT_TYPE': 'institute_name'}, {'TEXT': 'Hospital'}]
仅当两个词都包含在其中时,该规则才会识别匹配。因此,它将接受“西奈山医院”,而不是“西奈山”。我试过 spaczz 包裹 spaCy 并且适用于单个术语或短语。然而,spaCy 和 spaczz 都不允许像“Moung Sinai Mospital”中那样包含多个错字的模糊多词规则。
因此,我试图通过结合模糊相似性算法(例如 RapidFuzz)来重写 Matcher object,但我在使用它的 Cython 组件时遇到了一些困难。
Matcher's Class call method 查找与 doclike 上提供的模式匹配的所有标记序列,要匹配的文档或 Span(类型:Doc/Span),返回 (match_id, start, end) 元组列表,描述匹配项:
matches = find_matches (&self.patterns[0], self.patterns.size(), doclike, length,
extensions=self._extensions, predicates=self._extra_predicates)
for i, (key, start, end) in enumerate(matches):
on_match = self._callbacks.get(key, None)
if on_match is not None:
on_ma
return matches
find_matches 是一个 cython 类,它返回文档中的匹配项,将已编译的模式数组作为 (id, start, end) 元组的列表,并具有似乎将文档与预定义模式匹配的主循环:
# Main loop
cdef int nr_predicate = len(predicates)
for i in range(length):
for j in range(n):
states.push_back(PatternStateC(patterns[j], i, 0))
transition_states(states, matches, predicate_cache,
doclike[i], extra_attr_values, predicates)
extra_attr_values += nr_extra_attr
predicate_cache += len(predicates)
你能帮我在 python/C 级对象中将实际匹配操作(针对字符串的模式)定位为属性吗?我希望能够用模糊匹配算法扩展这个操作。您可以找到 Matcher 类、call 方法和 find_matches 类here 的代码。
您可以通过 spaczz here 遵循更加 Python 的努力来实现此目标。
【问题讨论】:
-
您是对 Cython 解决方案还是 Python 解决方案特别感兴趣?如果后者是一个选项,请发布一个可复制的示例,可以对其进行测试。同时,显示应该找到而不是应该找到的阈值(正面和负面示例)。