Вы можете сделать большую часть этого с SpaCY и некоторыми регулярными выражениями.
Итак, вам нужно взглянуть на документацию SpaCY API .
Основные шаги в любом конвейере NLP:
Определение языка (самоочевидно, если вы работаете с каким-либо набором данных, вы знаете, что такое язык, и вы можете адаптировать его)твой трубопровод к этому).Когда вы знаете язык, вы должны загрузить правильные модели из SpaCY.Инструкции здесь .Давайте использовать английский для этого примера.В командной строке просто введите python -m spacy download en
и затем импортируйте его в сценарий предварительной обработки, например:
import spacy
nlp = spacy.load('en')
Токенизация - это процесс разбиения текста на слова.Недостаточно просто сделать text.split()
(например, there's
будет рассматриваться как одно слово, но на самом деле это два слова there
и is
).Так что здесь мы используем токенизаторы.В SpaCy вы можете сделать что-то вроде:
nlp_doc = nlp(text)
, где text
- ваш корпус набора данных или образец из набора данных.Вы можете прочитать больше об экземпляре документа здесь
Удаление пунктуации - довольно понятный процесс, выполняемый методом на предыдущем шаге.Чтобы удалить знаки препинания, просто наберите:
import re
# removing punctuation tokens
text_no_punct = [token.text for token in doc if not token.is_punct]
# remove punctuation tokens that are in the word string like 'bye!' -> 'bye'
REPLACE_PUNCT = re.compile("(\.)|(\;)|(\:)|(\!)|(\')|(\?)|(\,)|(\")|(\()|(\))|(\[)|(\])")
text_no_punct = [REPLACE_PUNCT.sub("", tok.text) for tok in text_no_punct]
POS-теги - сокращение от части речи.Это процесс разметки слова в тексте как соответствующей определенной части речи.Например:
A/DT Part-Of-Speech/NNP Tagger/NNP is/VBZ a/DT piece/NN of/IN
software/NN that/WDT reads/VBZ text/NN in/IN some/DT
language/NN and/CC assigns/VBZ parts/NNS of/IN speech/NN to/TO
each/DT word/NN ,/, such/JJ as/IN noun/NN ,/, verb/NN ,/,
adjective/NN ,/, etc./FW./.
, где прописные коды после косой черты являются стандартными тегами слова.Список тегов можно найти здесь
В SpaCy это уже делается путем помещения текста в экземпляр nlp
.Вы можете получить теги с:
for token in doc:
print(token.text, token.tag_)
Морфологическая обработка: лемматизация - это процесс преобразования слов в лингвистически обоснованную базовую форму, называемую леммой:
nouns → singular nominative form
verbs → infinitive form
adjectives → singular, nominative, masculine, indefinitive, positive form
В SpaCy это также ужесделано для вас, поместив текст в nlp
экземпляр.Вы можете получить лемму каждого слова:
for token in doc:
print(token.text, token.lemma_)
Удаление стоп-слов - стоп-слова - это слова, которые не вносят никакой новой информации или значения в предложение и могут быть опущены.Как вы уже догадались, это уже сделано для вас nlp
экземпляром.Чтобы отфильтровать стоп-слова, просто наберите:
text_without_stopwords = [token.text for token in doc if not token.is_stop]
doc = nlp(' '.join(text_without_stopwords))
Теперь у вас есть чистый набор данных.Теперь вы можете использовать word2vec или GloVe предварительно обученные модели для создания векторов слов и ввода данных в некоторую модель.Кроме того, вы можете использовать TF-IDF для создания векторов слов, удаляя наиболее распространенные слова.Кроме того, в отличие от обычного процесса, вы можете оставить самые конкретные слова, так как ваша задача - лучше различать два текста.Я надеюсь, что это достаточно ясно:)