Скрипт предварительной обработки без удаления знаков препинания - PullRequest
1 голос
/ 02 июля 2019

У меня есть код, который должен предварительно обрабатывать список текстовых документов. То есть: учитывая список текстовых документов, он возвращает список с предварительно обработанными текстовыми документами. Но по некоторым причинам, это не работает, чтобы удалить пунктуацию.

import nltk
from nltk.tokenize import word_tokenize
from nltk.corpus import stopwords
nltk.download("stopwords")
nltk.download('punkt')
nltk.download('wordnet')


def preprocess(docs):
  """ 
  Given a list of documents, return each documents as a string of tokens, 
  stripping out punctuation 
  """
  clean_docs = [clean_text(i) for i in docs]
  tokenized_docs = [tokenize(i) for i in clean_docs]
  return tokenized_docs

def tokenize(text):
  """ 
  Tokenizes text -- returning the tokens as a string 
  """
  stop_words = stopwords.words("english")
  nltk_tokenizer = nltk.WordPunctTokenizer().tokenize
  tokens = nltk_tokenizer(text)  
  result = " ".join([i for i in tokens if not i in stop_words])
  return result


def clean_text(text): 
  """ 
  Cleans text by removing case
  and stripping out punctuation. 
  """
  new_text = make_lowercase(text)
  new_text = remove_punct(new_text)
  return new_text

def make_lowercase(text):
  new_text = text.lower()
  return new_text

def remove_punct(text):
  text = text.split()
  punct = string.punctuation
  new_text = " ".join(word for word in text if word not in string.punctuation)
  return new_text

# Get a list of titles  
s1 = "[UPDATE] I am tired"
s2 = "I am cold."

clean_docs = preprocess([s1, s2])
print(clean_docs)

Это распечатывает:

['[ update ] tired', 'cold .']

Другими словами, он не удаляет пунктуацию, потому что "[", "]" и "." все появляются в конечном продукте.

1 Ответ

0 голосов
/ 02 июля 2019

Вы пытаетесь найти слово в пунктуации.Очевидно, [UPDATE] не является пунктуацией.

Попробуйте найти пунктуацию в тексте или вместо нее заменить пунктуацию:

import string


def remove_punctuation(text: str) -> str:
    for p in string.punctuation:
        text = text.replace(p, '')
    return text


if __name__ == '__main__':
    text = '[UPDATE] I am tired'
    print(remove_punctuation(text))

# output:
# UPDATE I am tired

...