Как инициализировать `Doc` в текстовой версии 0.6.2?

Пытаясь следовать простому Doc инициализация в документах в Python 2 не работает:

>>> import textacy
>>> content = '''
...     The apparent symmetry between the quark and lepton families of
...     the Standard Model (SM) are, at the very least, suggestive of
...     a more fundamental relationship between them. In some Beyond the
...     Standard Model theories, such interactions are mediated by
...     leptoquarks (LQs): hypothetical color-triplet bosons with both
...     lepton and baryon number and fractional electric charge.'''
>>> metadata = {
...     'title': 'A Search for 2nd-generation Leptoquarks at √s = 7 TeV',
...     'author': 'Burton DeWilde',
...     'pub_date': '2012-08-01'}
>>> doc = textacy.Doc(content, metadata=metadata)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/a/anaconda/envs/env1/lib/python2.7/site-packages/textacy/doc.py", line 120, in __init__
    {compat.unicode_, SpacyDoc}, type(content)))
ValueError: `Doc` must be initialized with set([<type 'unicode'>, <type 'spacy.tokens.doc.Doc'>]) content, not "<type 'str'>"

Как должна выглядеть эта простая инициализация для строки или последовательности строк?

ОБНОВЛЕНИЕ:

Переходя unicode(content) в textacy.Doc() выплевывает

ImportError: 'cld2-cffi' must be installed to use textacy's automatic language detection; you may do so via 'pip install cld2-cffi' or 'pip install textacy[lang]'.

что было бы неплохо с момента установки текстовых сообщений, imo.

Даже после установки cld2-cffi при попытке кода выше выбрасывает

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/a/anaconda/envs/env1/lib/python2.7/site-packages/textacy/doc.py", line 114, in __init__
    self._init_from_text(content, metadata, lang)
  File "/Users/a/anaconda/envs/env1/lib/python2.7/site-packages/textacy/doc.py", line 136, in _init_from_text
    spacy_lang = cache.load_spacy(langstr)
  File "/Users/a/anaconda/envs/env1/lib/python2.7/site-packages/cachetools/__init__.py", line 46, in wrapper
    v = func(*args, **kwargs)
  File "/Users/a/anaconda/envs/env1/lib/python2.7/site-packages/textacy/cache.py", line 99, in load_spacy
    return spacy.load(name, disable=disable)
  File "/Users/a/anaconda/envs/env1/lib/python2.7/site-packages/spacy/__init__.py", line 21, in load
    return util.load_model(name, **overrides)
  File "/Users/a/anaconda/envs/env1/lib/python2.7/site-packages/spacy/util.py", line 120, in load_model
    raise IOError("Can't find model '%s'" % name)
IOError: Can't find model 'en'

2 ответа

Проблема, как показано в трассировке, заключается в textacy/doc.pyв_init_from_text()функция, которая пытается обнаружить язык и вызывает его со строкой'en' в строке 136. (spacy Репо затрагивает этот вопрос в этом выпуске комментария.)

Я решил это, предоставив действительный lang (Unicode) строка u'en_core_web_sm' и с помощью Unicode в content а также lang Строки аргумента.

import textacy

content = u'''
    The apparent symmetry between the quark and lepton families of
    the Standard Model (SM) are, at the very least, suggestive of
    a more fundamental relationship between them. In some Beyond the
    Standard Model theories, such interactions are mediated by
    leptoquarks (LQs): hypothetical color-triplet bosons with both
    lepton and baryon number and fractional electric charge.'''

metadata = {
    'title': 'A Search for 2nd-generation Leptoquarks at √s = 7 TeV',
    'author': 'Burton DeWilde',
    'pub_date': '2012-08-01'}

doc = textacy.Doc(content, metadata=metadata, lang=u'en_core_web_sm')

То, что строка вместо строки Unicode (с загадочным сообщением об ошибке) меняет поведение, тот факт, что отсутствует пакет, и, возможно, устаревший / возможно, неполный способ использования spacy языковые строки кажутся мне ошибками. ♂️

Похоже, вы используете Python 2 и получили ошибку Unicode. В документах textacy есть примечание о некоторых нюансах юникода при использовании Python 2:

Примечание: почти во всех случаях textacy (так же как spacy) ожидает работы с текстовыми данными Unicode. Во всем коде это обозначено как str соответствовать строковому типу Python 3 по умолчанию; пользователи Python 2, однако, должны помнить, чтобы использовать unicodeи при необходимости конвертировать из строкового типа по умолчанию (в байтах).

Поэтому я бы дал этому шанс (обратите внимание на u'''):

content = u'''
          The apparent symmetry between the quark and lepton families of
          the Standard Model (SM) are, at the very least, suggestive of
          a more fundamental relationship between them. In some Beyond the
          Standard Model theories, such interactions are mediated by
          leptoquarks (LQs): hypothetical color-triplet bosons with both
          lepton and baryon number and fractional electric charge.'''

Это произвело Doc объект, как и ожидалось для меня (хотя на Python 3).

Другие вопросы по тегам