Сочетание текста и удаление пунктуации в NLTK и scikit-learn

Я использую комбинацию NLTK и scikit-learn 's CountVectorizer для CountVectorizer слов и токенизации.

Ниже приведен пример простого использования CountVectorizer :

 from sklearn.feature_extraction.text import CountVectorizer vocab = ['The swimmer likes swimming so he swims.'] vec = CountVectorizer().fit(vocab) sentence1 = vec.transform(['The swimmer likes swimming.']) sentence2 = vec.transform(['The swimmer swims.']) print('Vocabulary: %s' %vec.get_feature_names()) print('Sentence 1: %s' %sentence1.toarray()) print('Sentence 2: %s' %sentence2.toarray()) 

Что будет печатать

 Vocabulary: ['he', 'likes', 'so', 'swimmer', 'swimming', 'swims', 'the'] Sentence 1: [[0 1 0 1 1 0 1]] Sentence 2: [[0 0 0 1 0 1 1]] 

Теперь, допустим, я хочу удалить стоп-слова и остановить слова. Один из вариантов – сделать это так:

 from nltk import word_tokenize from nltk.stem.porter import PorterStemmer ####### # based on http://www.cs.duke.edu/courses/spring14/compsci290/assignments/lab02.html stemmer = PorterStemmer() def stem_tokens(tokens, stemmer): stemmed = [] for item in tokens: stemmed.append(stemmer.stem(item)) return stemmed def tokenize(text): tokens = nltk.word_tokenize(text) stems = stem_tokens(tokens, stemmer) return stems ######## vect = CountVectorizer(tokenizer=tokenize, stop_words='english') vect.fit(vocab) sentence1 = vect.transform(['The swimmer likes swimming.']) sentence2 = vect.transform(['The swimmer swims.']) print('Vocabulary: %s' %vect.get_feature_names()) print('Sentence 1: %s' %sentence1.toarray()) print('Sentence 2: %s' %sentence2.toarray()) 

Какие принты:

 Vocabulary: ['.', 'like', 'swim', 'swimmer'] Sentence 1: [[1 1 1 1]] Sentence 2: [[1 0 1 1]] 

Но как мне лучше избавиться от символов пунктуации в этой второй версии?

One Solution collect form web for “Сочетание текста и удаление пунктуации в NLTK и scikit-learn”

Есть несколько вариантов, попробуйте удалить пунктуацию перед токенизацией. Но это будет означать, что don't -> dont

 import string def tokenize(text): text = "".join([ch for ch in text if ch not in string.punctuation]) tokens = nltk.word_tokenize(text) stems = stem_tokens(tokens, stemmer) return stems 

Или попробуйте удалить пунктуацию после токенизации.

 def tokenize(text): tokens = nltk.word_tokenize(text) tokens = [i for i in tokens if i not in string.punctuation] stems = stem_tokens(tokens, stemmer) return stems 
  • преобразование текстового файла в html-файл с помощью python
  • BeautifulSoup возвращает неожиданные дополнительные пробелы
  • Статистическая модель предложения предложений, например проверка орфографии
  • Имеет ли WordNet «уровни»? (НЛП)
  • получить индексы исходного текста из nltk word_tokenize
  • как извлечь форматированный текстовый контент из PDF
  • Вставить текст в PNG
  • Подсчитайте различные слова из кадра данных Pandas
  •  
    Interesting Posts for Van-Lav

    Matplotlib: использование фигурного объекта для инициализации графика

    Имя теней xyz из внешней области

    Как я могу предоставить документацию Sphinx для namedtuple (с помощью autodoc)?

    Объединение элементов в список: похоже, что python рассматривает один и тот же элемент двумя разными способами, и я не знаю, почему

    ImportError: нет модуля с именем numpy – Google Cloud Dataproc при использовании Jupyter Notebook

    Python – Прокручивающееся окно Оценка регрессии OLS

    Вычисление расстояния перекрытия двух сегментов 1D линии

    Подпроцесс Python – пишите несколько stdin

    Разница между a = b и a = a – b в Python

    Присвоение значения одиночному подчеркиванию _ в интерпретаторе Python / IPython

    Установка SNAP в Python?

    Алгоритм минимального расстояния с использованием GDAL и Python

    Обертка C ++ Qt-виджета для использования в Python с PySide

    Как сортировать фрейм данных с помощью массива, который не находится в фрейме данных

    самое отрицательное значение для python

    Python - лучший язык программирования в мире.