Spacy Phrase Matcher проблема, чувствительная к пространству - PullRequest
0 голосов
/ 20 января 2020
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.")

Если я введу лишний пробел между словами «Барак Обама», совпадение фраз не будет работать, поскольку оно чувствительно к пробелам. Есть ли способ решить эту проблему, чувствительную к пространству?

  • Операционная система: Windows 8
  • Python Используемая версия: 3.7
  • Используемая версия spaCy: 2.2.3
  • Информация об окружающей среде: Conda

1 Ответ

0 голосов
/ 20 января 2020
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)]
...