несколько объектов SpaCy doc и хотите объединить их в один объект - PullRequest
0 голосов
/ 11 июля 2019

Я пытаюсь токенизировать текстовый файл из Библии короля Иакова, но когда я пытаюсь это сделать, я получаю ошибку памяти.Итак, я разделил текст на несколько объектов.Теперь я хочу использовать spaCy для токенизации объектов, а затем объединить их в один объект документа.Я видел, как другие говорили о похожих проблемах и преобразовывали их в массивы, а затем возвращались в документ после объединения массивов.Будет ли это работать, чтобы исправить мою проблему или создать новые проблемы позже?

Я попытался запустить это, но у colab и моего компьютера нет оперативной памяти для его поддержки.

nlp_spacy = spacy.load('en')
kjv_bible  = gutenberg.raw('bible-kjv.txt')

#pattern for bracketed text titles
bracks = "[\[].*?[\]]"

kjv_bible = re.sub(bracks, "", kjv_bible)

kjv_bible =  ' '.join(kjv_bible.split())

len(kjv_bible)

kjv_bible_doc = nlp_spacy(kjv_bible)

ValueError                                Traceback (most recent call 
last)
<ipython-input-19-385936fadd40> in <module>()
----> 1 kjv_bible_doc = nlp_spacy(kjv_bible)

/usr/local/lib/python3.6/dist-packages/spacy/language.py in 
__call__(self, text, disable, component_cfg)
    378         if len(text) > self.max_length:
    379             raise ValueError(
--> 380                 Errors.E088.format(length=len(text), 
max_length=self.max_length)
    381             )
    382         doc = self.make_doc(text)

ValueError: [E088] Text of length 4305663 exceeds maximum of 1000000. 
The v2.x parser and NER models require roughly 1GB of temporary memory 
per 100,000 characters in the input. This means long texts may cause 
memory allocation errors. If you're not using the parser or NER, it's 
probably safe to increase the `nlp.max_length` limit. The limit is in 
number of characters, so you can check whether your inputs are too 
long by checking `len(text)`.



nlp.max_length = 4305663
kjv_bible_doc = nlp_spacy(kjv_bible)

приводит к сбою ноутбука из-за ОЗУ

будет работать

np_array = doc.to_array([LOWER, POS, ENT_TYPE, IS_ALPHA])
np_array.extend(np_array2)
doc2.from_array([LOWER, POS, ENT_TYPE, IS_ALPHA], np_array)

1 Ответ

0 голосов
/ 13 июля 2019

Если вы увеличите max_length, он будет зависать, если вы явно не отключите компоненты, которые используют много памяти (анализатор и NER).Если вы используете только токенизатор, при загрузке модели вы можете отключить все, кроме токенизатора:

nlp = spacy.load('en', disable=['tagger', 'parser', 'ner'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...