2017-02-14 39 views
2

Spacy, похоже, не в состоянии правильно токенизировать выражения am/pm, где число и часть am/pm не разделены пробелом.Как получить Spacy для корректного выражения токена am/pm?

Пример: «Что-то произошло в 9 утра» производит неожиданный маркер набор: Список объектов Token: [Что-то, бывало, на, LIKE_URL, я]

В то время как «Что-то случилось в 9 утра» работает нормально : Список Токеном объектов: [что-то, бывало, в, 9, я]

Для воспроизведения:

>>> import spacy 
    >>> nlp = spacy.load('en') 
    >>> doc = nlp(u"Something happened at 9am") 
    >>> tokens = [x for x in doc] 
    >>> tokens 
    [Something, happened, at, LIKE_URL, am] 

    >>> doc2 = nlp("Something happened at 9 am") 
    >>> tokens2 = [x for x in doc] 
    >>> tokens2 
    [Something, happened, at, 9, am] 

Я заметил, что если углубиться в объект маркеров, тем «Орт» представительство токен - это 9. Аналогично, если я попробую «8am», токен читает «IS_UPPER», а «ортовое» представление токена равно 8.

В частности, это проблема для меня, потому что мне нужно отслеживать интервалы токенов по более широкий контекст и токен, который отображается как «8» в тексте, но «IS_UPPER» в форме токена заставляет мои промежутки отключать на 7. (IE - фактический индекс уровня документа (token.idx) следующего токена выкл. 7)

Как обрабатывать документ с помощью spacy, который содержит выражения am/pm, которые иногда обозначаются в формате, описанном выше, и извлекать точные интервалы токенов?

Я использую Python 2.7.12 с Spacy 1.4.0

ответ