Size: a a a

Natural Language Processing

2019 October 24

SZ

Sergey Zakharov in Natural Language Processing
Каждое слово проверять на наличие в словарях языков. Каких языков больше среди слов, тот язык и назначать. Питоновский словарь работает за О(1), так что будет быстро, надо только списки слов составить/найти для каждого языка и сложить в словари.
источник

SZ

Sergey Zakharov in Natural Language Processing
Это если по тексту надо определить язык. По одному слову - только в словаре найти. Вроде просто всё.
источник

V

Vlad in Natural Language Processing
Ну да, если не только англ/рус, то получается самый точный вариант будет поиск по словарю
источник

V

Vlad in Natural Language Processing
Может подскажете, где их можно найти?)
источник

SZ

Sergey Zakharov in Natural Language Processing
Даже не словари нужны тут, а множества
источник

SZ

Sergey Zakharov in Natural Language Processing
Vlad
Может подскажете, где их можно найти?)
Я не знаю. Сам бы в гугл полез, а если бы не нашёл - из дампа Википедии можно сделать, например. Или ещё из какого корпуса.
источник

V

Vlad in Natural Language Processing
понял, спасибо за информацию)
источник

OS

Oleg Serikov in Natural Language Processing
кстати а какие-нить символьные нграммы не отлично характеризуют язык если слова нет в словаре?
источник

SZ

Sergey Zakharov in Natural Language Processing
Правда будут одинаковые слова, их можно выбирать из распределения в языках (распределения построить по частотности). Тоже вроде не должно быть сложно.
источник

DK

Denis Kirjanov in Natural Language Processing
либа была же, langdetect
источник

V

Vlad in Natural Language Processing
Denis Kirjanov
либа была же, langdetect
посмотрите моё сообщение выше, на отдельных словах она не очень работает
источник
2019 October 25

V

Vlad in Natural Language Processing
Разбираюсь тут с лемматизацией в spaCy (он пока что используется только для этого) и возник вопрос. В чём разница между этими двумя вариантами ниже? По первому впечатлению, скорость и качество работы у них не отличается, однако первый требует загрузки готовой модели, а второй нет. Использую spacy[lookops] последней актуальной версии 2.2.

Вариант 1:
import spacy
morph_analyser_en = spacy.load('en_core_web_sm', disable=['tagger', 'parser', 'ner'])

Вариант 2:
from spacy.lang.en import English
morph_analyser_en = English()

Собственно, лемматизация:
for i in range(len(words)):
   result_analysing = morph_analyser_en(words[i])
   lemma = result_analysing[-1].lemma_
источник

IN

Ilya Nikitin in Natural Language Processing
Vlad
Разбираюсь тут с лемматизацией в spaCy (он пока что используется только для этого) и возник вопрос. В чём разница между этими двумя вариантами ниже? По первому впечатлению, скорость и качество работы у них не отличается, однако первый требует загрузки готовой модели, а второй нет. Использую spacy[lookops] последней актуальной версии 2.2.

Вариант 1:
import spacy
morph_analyser_en = spacy.load('en_core_web_sm', disable=['tagger', 'parser', 'ner'])

Вариант 2:
from spacy.lang.en import English
morph_analyser_en = English()

Собственно, лемматизация:
for i in range(len(words)):
   result_analysing = morph_analyser_en(words[i])
   lemma = result_analysing[-1].lemma_
И все же tagger, parser и NER отключаются для улучшения скорости. Когда нужна только лемматизация, нет необходимости строить при этом предсказания по частям речи, зависимостям и сущностям (их spaCy всегда сразу делает по дефолту, если не указано иное)
источник

V

Vlad in Natural Language Processing
Ilya Nikitin
И все же tagger, parser и NER отключаются для улучшения скорости. Когда нужна только лемматизация, нет необходимости строить при этом предсказания по частям речи, зависимостям и сущностям (их spaCy всегда сразу делает по дефолту, если не указано иное)
Спасибо)
Судя по документации, ещё можно textcat отключить в варианте с загрузкой модели. Но тогда вопрос, а на каком этапе выполняется лемматизация тогда? При токенизации? Или это отдельная сущность?
источник

V

Vlad in Natural Language Processing
Там есть отдельный класс Lemmatizer, но при этом нигде не упоминается, кто его дёргает. Или я не нашёл)
источник

SZ

Sergey Zakharov in Natural Language Processing
Vlad
Разбираюсь тут с лемматизацией в spaCy (он пока что используется только для этого) и возник вопрос. В чём разница между этими двумя вариантами ниже? По первому впечатлению, скорость и качество работы у них не отличается, однако первый требует загрузки готовой модели, а второй нет. Использую spacy[lookops] последней актуальной версии 2.2.

Вариант 1:
import spacy
morph_analyser_en = spacy.load('en_core_web_sm', disable=['tagger', 'parser', 'ner'])

Вариант 2:
from spacy.lang.en import English
morph_analyser_en = English()

Собственно, лемматизация:
for i in range(len(words)):
   result_analysing = morph_analyser_en(words[i])
   lemma = result_analysing[-1].lemma_
Возможно, это и есть одно и то же. Но это не точно
источник

SZ

Sergey Zakharov in Natural Language Processing
Vlad
Там есть отдельный класс Lemmatizer, но при этом нигде не упоминается, кто его дёргает. Или я не нашёл)
Вот тут вроде есть ответ (сам не пробовал)
https://stackoverflow.com/a/48948642
источник

V

Vlad in Natural Language Processing
Ему ж надо дополнительно передавать pos тег каждого слова
источник

АП

Алексей Пахомов in Natural Language Processing
Викисловарь по русскому сдампленый где то валялся
источник

V

Vlad in Natural Language Processing
Я думаю pymorphy2 будет получше для русского, чем текущие модели spaCy. Кстати, судя по всему, недавно в spaCy как раз и прикрутили использование pymorphy2 для работы с русским языком, он есть в списке зависимостей для русского и украинского языков https://spacy.io/usage/models#languages
источник