Как инициализировать `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).