【问题标题】:Spacy Phrase Matcher space sensitive issueSpacy Phrase Matcher 空间敏感问题
【发布时间】:2020-01-20 05:17:41
【问题描述】:
terms = ["Barack Obama", "Angela Merkel", "Washington, D.C."]
doc = nlp("German Chancellor Angela Merkel and US President Barack  Obama "
      "converse in the Oval Office inside the White House in Washington, D.C.")

如果我在单词“Barack Obama”之间输入了一个额外的空格,则短语匹配器将不起作用,因为它对空格敏感。 有没有办法克服这个空间敏感问题?

  • 操作系统:Windows 8
  • 使用的 Python 版本:3.7
  • 使用的 spaCy 版本:2.2.3
  • 环境信息:康达

【问题讨论】:

  • 将为你删除字符串之间的额外空格 ????
  • 是的,删除字符串之间的额外空格有效。但有时我们可能会不小心输入额外的空格。所以在这种情况下,代码应该可以工作。 (即如果指定单词之间有一个空格或多个空格,则短语匹配器应该匹配)。

标签: python nlp spacy


【解决方案1】:
import re
re.sub(' +',' ', "barack    obama")

#op
'barack obama'

参考文档https://spacy.io/api/phrasematcher

import en_core_web_sm
nlp = en_core_web_sm.load()

matcher = PhraseMatcher(nlp.vocab)
matcher.add("OBAMA", None, nlp("Barack Obama"))

doc = nlp("Barack Obama urges Congress to find courage to defend his healthcare reforms")
matches = matcher(doc)

#op
[(7732777389095836264, 0, 2)]

但是当字符串之间有多个空格时,它将返回空列表。即巴拉克奥巴马之间有多个空格

doc = nlp("Barack   Obama urges Congress to find courage to defend his 
healthcare reforms")
print(matcher(doc))
#op
[]

为了解决这个问题,我想从给定的字符串中删除多余的空间

string_=  'Barack   Obama urges Congress to find courage to defend his healthcare reforms'

space_removed_string = re.sub(' +',' ', string_)

#now passing the string in model
doc = nlp(space_removed_string)
print(matcher(doc))

#op
[(7732777389095836264, 0, 2)]

【讨论】:

  • 请为您的纯代码答案添加更多解释,以提高其质量,否则它看起来是正确的。
  • 如果术语列表中的术语与给定句子匹配。短语匹配器返回匹配的字符串。如果术语列表中的术语以及句子在“Barack Obama”之间有一个空格,则短语匹配器将起作用。有时我们可能会不小心在句子中输入多余的空格。所以在这种情况下,代码应该可以工作。 (即,如果术语之间有单个空格或多个空格,则短语匹配器应该匹配)。你可以参考这个链接spacy.io/usage/rule-based-matching#phrasematcher
  • @qaiser 我尝试了您更新的解决方案,它工作正常,不会影响代码的性能。非常感谢。
  • 这是一个更好的答案。感谢您听取反馈。
猜你喜欢
  • 1970-01-01
  • 2016-01-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-19
  • 2020-01-05
  • 2019-06-20
  • 1970-01-01
相关资源
最近更新 更多