Python NLP: эффективный способ удаления странных слов / символов из строки на естественном языке - PullRequest
0 голосов
/ 25 октября 2019

Я работаю с множеством строк, которые содержат естественный язык.

, например:

s1 = "good day sir r please send morning text wa x x kind jennifer hardy directory mary advertisement estate west t f marcus peter"

, из которого я хочу удалить оба имени (Дженнифер, Харди, Маркус, Питер), а также последовательности (r, wa, x, t, f).

, так что результат будет примерно таким:

s = "good day sir please send morning text kind directory advertisement estate west"

Я уже опробовал немного пакета nltk, но, к сожалению, результаты были не такими, как хотелось:

import nltk
from nltk import word_tokenize

names = nltk.corpus.names.words()
words = nltk.corpus.words.words()

s1_tok = word_tokenize(s1)

filtered_s1 = [w for w in raw_body if w in words and w not in names]

print(" ".join(filtered_s1))

возвращает

'good day sir r please send morning text wa x x kind hardy directory mary advertisement estate west t f peter'

, поэтому некоторые элементы былиудалены но не все. Также этот пост не решил мою проблему (которая делает что-то подобное). Я думал об использовании коричневого корпуса:

from nltk.corpus import brown

brown_corp = brown.words()

filtered_s1 = [w for w in s1_tok if w in brown_corp]

, но это занимает целую вечность. Есть ли что-то, что я пропускаю? Есть ли более умный способ эффективного решения моей проблемы, в идеале без использования RegEx?

РЕДАКТИРОВАТЬ: неправильно скопировал мой код здесь, вместо слов использовались слова.

1 Ответ

0 голосов
/ 29 октября 2019

Это будет быстрее:

brown_corp = set( brown.words() )

filtered_s1 = ( w for w in s1_tok if w in brown_corp )
...