Предварительная обработка текста в Python

Итак, вы планируете провести исследование в текстовых полях, но не знаете, с чего начать?

Что ж, почему бы не начать с предварительной обработки текста, поскольку это очень важно при исследовании текстового поля и это легко! Очистка текста помогает получить качественный результат за счет удаления всего нерелевантного текста и получения форм слов и т. Д.

В этой статье мы рассмотрим:

1. Преобразование текста в нижний регистр

2. Сокращение

3. Токенизация предложения

4. Токенизация слов

5. Проверка орфографии

6. Лемматизировать

7. Выделение стеблей

8. Удалить теги.

9. Удалите числа.

10. Удалите знаки препинания.

11. Удалите игнорируемые слова.

Давайте начнем!

Предварительные условия:

установить Python

установить НЛТК

pip install автозамена

Готово к установке? Ладно! приступим к программированию!

Преобразование текста в нижний регистр:

Преобразование текста в нижний регистр, как в, преобразование «Hello» в «hello» или «HELLO» в «hello».

import nltk
def to_lower(text):
    """
    Converting text to lower case as in, converting "Hello" to  "hello" or "HELLO" to "hello".
    """
    return ' '.join([w.lower() for w in word_tokenize(text)])
text = """Harry Potter is the most miserable, lonely boy you can imagine. He's shunned by his relatives, the Dursley's, that have raised him since he was an infant. He's forced to live in the cupboard under the stairs, forced to wear his cousin Dudley's hand-me-down clothes, and forced to go to his neighbour's house when the rest of the family is doing something fun. Yes, he's just about as miserable as you can get."""
print (to_lower(text))

Удалить теги

Удаление HTML-тегов из текста, например «‹head› ‹body›» с помощью регулярного выражения.

import re
text = """<head><body>hello world!</body></head>"""
cleaned_text = re.sub('<[^<]+?>','', text)
print (cleaned_text)
[OUTPUT]:
hello world!

Удалить номера

Удаление чисел из текста, таких как «1,2,3,4,5…». Обычно мы удаляем числа при кластеризации текста или получении ключевых фраз, поскольку числа не придают большого значения для получения основных слов. Чтобы удалить числа, вы можете использовать: .isnumeric () else .isdigit ()

text = "There was 200 people standing right next to me at 2pm."
output = ''.join(c for c in text if not c.isdigit())
print(output)
[OUTPUT]:
There was  people standing right next to me at pm.

Удалить знаки препинания

Удаление знаков препинания в тексте, например «.?!» а также символы типа «@ # $».

from string import punctuation
def strip_punctuation(s):
    return ''.join(c for c in s if c not in punctuation)
text = "Hello! how are you doing?"
print (strip_punctuation(text))
[OUTPUT]:
Hello how are you doing

Лемматизировать

Лемматизация похожа на выделение корней, но она привносит контекст в слова и связывает слова с одинаковым значением в одно слово. Лемматизация выполняет морфологический анализ слов. Короче говоря, лемматизируйте текст, чтобы получить его корневую форму, например: функции, функциональность как функция

import nltk
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer
#is based on The Porter Stemming Algorithm
stopword = stopwords.words(‘english’)
wordnet_lemmatizer = WordNetLemmatizer()
text = “the functions of this fan is great”
word_tokens = nltk.word_tokenize(text)
lemmatized_word = [wordnet_lemmatizer.lemmatize(word) for word in word_tokens]
print (lemmatized_word)
[OUTPUT]: ['the', 'function', 'of', 'this', 'fan', 'is', 'great']

Стемминг

Построение и лемматизация - это нормализация текста (или иногда называемая нормализацией слова)
Она не хранит таблицу поиска для фактических основ слова, но применяет алгоритмические правила для генерации основы. Он использует правила, чтобы решить, стоит ли удалять суффикс.

import nltk
from nltk.corpus import stopwords
from nltk.stem import SnowballStemmer
#is based on The Porter Stemming Algorithm
stopword = stopwords.words(‘english’)
snowball_stemmer = SnowballStemmer(‘english’)
text = “This is a Demo Text for NLP using NLTK. Full form of NLTK is Natural Language Toolkit”
word_tokens = nltk.word_tokenize(text)
stemmed_word = [snowball_stemmer.stem(word) for word in word_tokens]
print (stemmed_word)
[OUTPUT]: ['this', 'is', 'a', 'demo', 'text', 'for', 'nlp', 'use', 'nltk', '.', 'full', 'form', 'of', 'nltk', 'is', 'natur', 'languag', 'toolkit']

слово tokenize

Токенизируйте слова, чтобы получить токены текста, т.е. разбить предложения на список слов.

text = “This is a Demo Text for NLP using NLTK. Full form of NLTK is Natural Language Toolkit”
word_tokens = nltk.word_tokenize(text)
print (word_tokens)
[OUTPUT]: ['This', 'is', 'a', 'Demo', 'Text', 'for', 'NLP', 'using', 'NLTK', '.', 'Full', 'form', 'of', 'NLTK', 'is', 'Natural', 'Language', 'Toolkit']

токенизировать предложение

Если есть более одного предложения, разделите его, то есть разбейте предложения на список предложений.

text = “This is a Demo Text for NLP using NLTK. Full form of NLTK is Natural Language Toolkit”
sent_token = nltk.sent_tokenize(text)
print (sent_token)

Удаление стоп-слов

Удалите из предложений нерелевантные слова, используя nltk стоп-слова, такие как «is, the, a» и т. Д., Поскольку они не несут никакой информации.

import nltk
from nltk.corpus import stopwords
stopword = stopwords.words(‘english’)
text = “This is a Demo Text for NLP using NLTK. Full form of NLTK is Natural Language Toolkit”
word_tokens = nltk.word_tokenize(text)
removing_stopwords = [word for word in word_tokens if word not in stopword]
print (removing_stopwords)
[OUTPUT]: ['This', 'Demo', 'Text', 'NLP', 'using', 'NLTK', '.', 'Full', 'form', 'NLTK', 'Natural', 'Language', 'Toolkit']

Сокращение

Сокращение помогает расширить словоформу, например, нет: нет. В моем гитхабе создан файл схваток, который мы будем импортировать для его использования.

# coding: utf-8
import re
import nltk
from contractions import contractions_dict
def expand_contractions(text, contractions_dict):
    contractions_pattern = re.compile('({})'.format('|'.join(contractions_dict.keys())),
                                      flags=re.IGNORECASE | re.DOTALL)
def expand_match(contraction):
        match = contraction.group(0)
        first_char = match[0]
        expanded_contraction = contractions_dict.get(match) \
            if contractions_dict.get(match) \
            else contractions_dict.get(match.lower())
        expanded_contraction = expanded_contraction
        return expanded_contraction
expanded_text = contractions_pattern.sub(expand_match, text)
    expanded_text = re.sub("'", "", expanded_text)
    return expanded_text
def main():
    text = """I ain't going there. You'll have to go alone."""
    
    text=expand_contractions(text,contractions_dict)
    sentences = nltk.sent_tokenize(text)
    tokenized_sentences = [nltk.word_tokenize(sentence) for sentence in sentences]
    
    print (tokenized_sentences)
if __name__ == '__main__':
    main()

Проверка орфографии

исправьте неправильно написанные слова, такие как «wrld» на «world»

from autocorrect import spell
text = "This is a wrld of hope"
spells = [spell(w) for w in (nltk.word_tokenize(text))]
print (spells)
[OUTPUT]: ['This', 'is', 'a', 'world', 'of', 'hope']

PS:

Вы можете получить весь вышеперечисленный код с GITHUB

После того, как вы закончите предварительную обработку, вы можете перейти к NER, кластеризации, подсчету слов, анализу тональности и т. Д.

позвольте мне представить вам небольшую демонстрацию подсчета слов, которая поможет нам извлечь основные слова из документа. Итак, как только вы закончите предварительную обработку, у вас останется чистый список слов, то есть без стоп-слов, чисел, знаков препинания и т. Д. Теперь вы можете подсчитать количество повторений слов, которое известно как частота слов. . Для перебора предварительно обработанного списка и подсчета частоты.

for word in pre_process_text:
    if word in word_count:
        word_count[word] += 1
    else:
        word_count[word] = 1
#Print in sorted order
for w in sorted(word_count, key=word_count.get, reverse=True):
    print (w, word_count[w])

Затем вы получаете список слов с указанием частоты, которые вы можете проанализировать и сказать, что это основные слова этого документа или что в этом документе говорится «дайте наиболее часто встречающиеся слова». Легко, правда?

Всего наилучшего в ваших исследованиях!