Архив метки: nltk

Функция токенизации текста на python

Токенизация — это разбиение текста на более мелкие части, токены. К токенам относятся как слова, так и знаки пунктуации. Достаточно часто стоит задача представить текст в виде массива значимых слов. Тогда после токенизации необходимо произвести чистку на предмет знаков пунктуации и не значимых слов (например предлогов). Так как почти всегда в задачах обработки естественного языка ставится такая задача, то я написал небольшую функцию хелпер:

# -*- coding: utf-8 -*-
import nltk
import string
from nltk.corpus import stopwords

def tokenize_me(file_text):
    #firstly let's apply nltk tokenization
    tokens = nltk.word_tokenize(file_text)

    #let's delete punctuation symbols
    tokens = [i for i in tokens if ( i not in string.punctuation )]

    #deleting stop_words
    stop_words = stopwords.words('russian')
    stop_words.extend(['что', 'это', 'так', 'вот', 'быть', 'как', 'в', '—', 'к', 'на'])
    tokens = [i for i in tokens if ( i not in stop_words )]

    #cleaning words
    tokens = [i.replace("«", "").replace("»", "") for i in tokens]

    return tokens

Поясню код. Во первых я воспользовался стандартной функцией из хорошо известной python библиотеки nltk word_tokenize(). Не смотря на все прелести данной функции, она расчитана для работы с множеством языков, а нас интересует русский язык. Из-за этого возникают некоторые неточности, которые мы обработаем дальше. К тому же эта функция не избавляет нас от знаков препинания. На следующем этапе мы избавляемся от знаков препинания, проверив каждое слово на string.punctuation. На следующем этапе вспомним про множество вспомогательных слов в русском языке, и подумаем, а нужны ли они нам? Если не нужны, то можно сделать так же как я — импортировать стоп слова из всё той же библиотеки для работы с естественным языком NLTK и исключить их из нашего конечного списка. Более того, для своих нужд я расширил этот список словами, которые не нужны в конечном итоге. На последнем шаге подчищаем результаты, убирая из слов возможный мусор. В результате получаем список слов для дальнейшей обработки.