Сочетание текста и удаление пунктуации в 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 
  • python PIL рисует многострочный текст на изображении
  • как извлечь форматированный текстовый контент из PDF
  • поиск опции текста маркера для pyplot.plot ()
  • Python: EOFError: EOF при чтении строки
  • Вставить текст в PNG
  • Каков наилучший способ изменить текст, содержащийся в файле XML, используя Python?
  • Аннотировать тепловую карту со значением из кадра данных Pandas
  • Только извлечение текста из этого элемента, а не его детей
  • Как загрузить данные с помощью numpy без фиксированного размера столбца
  • Печатать в кодированный файл UTF-8, с перестраиваемыми на платформе символами новой строки?
  • преобразование текстового файла в html-файл с помощью python
  • Python - лучший язык программирования в мире.