Spacy:检测实体是否被引用
Spacy: Detect if entity is quoted
我需要检测给定的实体是否被引号包围,无论是单引号还是双引号。我该怎么做。
我的第一个想法是向跨度添加自定义扩展:
def is_quoted(span):
prev_token = span.doc[span.start - 1]
next_token = span.doc[span.end + 1]
return prev_token in ["\"", "'"] and next_token in ["\"", "'"]
Span.set_extension("is_quoted", getter=is_quoted)
但这真的是最有效的方法吗?我只想对实体执行此操作。
或者我最好只编写一个自定义匹配器,使用特定的正则表达式?但这将 运行 我的整个文档。
如果您只关心前后的引号,您的自定义扩展看起来不错。您只需要正确处理跨度位于文档开头或结尾的情况,而您现在没有这样做 - 如果跨度位于开头,您将检查 doc[-1]
,最后一个标记,例如。
您是否关心 John said, "I never though I'd meet Peter Smith!"
之类的事情,其中“Peter Smith”是一个实体?如果是这样,我会想出一个嵌套引号的策略(如果很少见,可能只是忽略它们)并创建一个扩展来遍历每个句子并将每个标记标记为在引号中,或者不在引号中(引号本身定义你想要的)。
如果您关心复杂的情况,我不会为此使用 Matcher - 它不能很好地处理嵌套,而且我认为使用它的任何解决方案都会比基本状态跟踪更复杂。 (如果你只关心前后左右应该没问题。)
我需要检测给定的实体是否被引号包围,无论是单引号还是双引号。我该怎么做。
我的第一个想法是向跨度添加自定义扩展:
def is_quoted(span):
prev_token = span.doc[span.start - 1]
next_token = span.doc[span.end + 1]
return prev_token in ["\"", "'"] and next_token in ["\"", "'"]
Span.set_extension("is_quoted", getter=is_quoted)
但这真的是最有效的方法吗?我只想对实体执行此操作。
或者我最好只编写一个自定义匹配器,使用特定的正则表达式?但这将 运行 我的整个文档。
如果您只关心前后的引号,您的自定义扩展看起来不错。您只需要正确处理跨度位于文档开头或结尾的情况,而您现在没有这样做 - 如果跨度位于开头,您将检查 doc[-1]
,最后一个标记,例如。
您是否关心 John said, "I never though I'd meet Peter Smith!"
之类的事情,其中“Peter Smith”是一个实体?如果是这样,我会想出一个嵌套引号的策略(如果很少见,可能只是忽略它们)并创建一个扩展来遍历每个句子并将每个标记标记为在引号中,或者不在引号中(引号本身定义你想要的)。
如果您关心复杂的情况,我不会为此使用 Matcher - 它不能很好地处理嵌套,而且我认为使用它的任何解决方案都会比基本状态跟踪更复杂。 (如果你只关心前后左右应该没问题。)