如何让 Spacy 正确标记 am/pm 表达式?

How to get Spacy to tokenize am/pm expressions correctly?

Spacy 似乎无法正确标记 am/pm 表达式,其中数字和 am/pm 部分未用空格分隔。

示例:"Something happened at 9am" 生成意外的标记集: Token 对象列表:[Something, happened, at, LIKE_URL, am]

虽然 "Something happened at 9 am" 工作正常: Token 对象列表:[Something, happened, at, 9, am]

重现:

    >>> 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]

我注意到,如果您深入了解令牌对象,令牌的 'orth' 表示形式是 9。同样,如果我尝试“上午 8 点”,令牌显示为 'IS_UPPER' 并且'orth' 代币表示为 8。

这对我来说尤其是个问题,因为我需要在更广泛的上下文中跟踪令牌跨度,而文本中显示为“8”但令牌形式 "IS_UPPER" 的令牌会导致我的跨度由 7 关闭。(即下一个标记的实际文档级索引(token.idx)由 7 关闭)

如何处理包含有时以上述格式表示的 am/pm 表达式的 spacy 文档,并检索准确的标记跨度?

我正在使用 Python 2.7.12 和 Spacy 1.4.0

事实证明,这是大约一个月前报告的错误: https://github.com/explosion/spaCy/issues/736

升级到 Spacy 1.6.0 解决了这个问题。