У меня есть конвейер NLP на основе spaCy, который обрабатывает большие корпуса, затем ищет совпадения по определенным словам (лемма плюс часть речи), а затем записывает подробную лексическую информацию для каждого совпадения. В результате получается словарь Python, структурированный как в следующем (упрощенном) фрагменте, где w
- это соответствующий токен, а sent_id
- уникальный хэш предложения / корпуса, в котором был найден токен:
this_match = {"tag": w.tag_,
"dep": w.dep_,
"parent": w.head_,
"children": [{"lemma": c.lemma_,
"tag": c.tag_}
for c in w.children if not c.is_punct]
"sent_id": sent_id}
Эти меньшие словари, каждый из которых представляет лингвистический контекст, в котором появляется слово, затем добавляются в словарь верхнего уровня, который связан с леммой / POS каждого маркера соответствия w
. Этот словарь служит хранилищем лексической информации для расчета различной статистики по лингвистическим характеристикам слов.
Как вы можете видеть, наша структура данных представляет собой простой JSON со словарями и массивами словарей текста. Как мне хранить его для последующего анализа? В данный момент мне нужно только локальное решение, но если (как Elasticsearch, на 2. ниже), решениеявно масштабируемый, тогда еще лучше. Вот некоторые варианты, которые я рассмотрел:
Просто сохраните их все как JSON и загружайте их каждый раз, когда вы работаете со статистикой.
Загрузите их в индекс Elasticsearch. (Точки данных сами по себе не являются документами, поэтому Elasticsearch кажется излишним.)
Используйте какой-то другой более легкий и простой формат базы данных (TinyDB?).
Pickle для .pkl
архива. (Слишком большой; его нелегко передать другим разработчикам / средам.)
Что вы использовали в прошлом для хранения данных с лексической индексацией? Есть ли полезность для этого варианта использования? И как мне обеспечить масштабируемость моего хранилища данных?
Этот вопрос более открытый, чем я обычно хотел бы задать или посмотреть в Stackoverflow, но я думаю, что он будет полезен длядостаточно много других разработчиков, работающих в НЛП, о которых стоит все равно спросить.