Есть ли способ удалить все слова в тексте, которых нет в другом тексте? - PullRequest
0 голосов
/ 16 апреля 2019

У меня есть документ со многими отзывами.Я создаю пакет слов, используя TfidfVectorizer.Что я хочу сделать: я хочу использовать только слова в BW, которые также есть в другом документе D.

Документ D - это документ с положительными словами.Я использую этот позитив, чтобы улучшить свою модель.Я имею в виду следующее: я хочу считать только положительные слова.

Есть ли способ сделать это?

Спасибо

Я создал фрагмент кодачтобы выполнить эту работу, как пара: train_x - это фрейм данных panda с Reviews.

pos_file = open("positive-words.txt")
neg_file = open("negative-words.txt")

#creating arrays based on the files
for ln in pos_file:
    pos_words.append(ln.strip())
for ln in neg_file:
    neg_words.append(ln.strip())

#adding all the positive and negative words together
sentiment_words.append(pos_words)
sentiment_words.append(neg_words)

pos_file.close()
neg_file.close()

#filtering all the words that are not in the sentiment array
filtered_res =[]
for r in train_x:
    keep = []
    parts = r.split()
    for p in parts:
        if p in pos_words:
            keep.append(p)
    #turning the Review array back to text again
    filtered_res.append(" ".join(keep))

train_x = filtered_res

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

PS: Python имеет так много функций, что я всегда спрашиваю, что он может делать, не используя количество кода, которое я использовал

1 Ответ

0 голосов
/ 17 апреля 2019

Вот немного более оптимизированная версия (потому что

  1. он не выполняет линейный поиск p в pos_words в цикле
  2. это векторизация цикла (более питоническая)
  3. вместо сохранения списка для каждого r, у него есть версия генератора

import re

pos_words_set = set (pos_words)

def filter (r):
    keep = []
    # use [A-Za-z] to avoid numbers
    for p in re.finditer(r"[A-Za-z0-9]+", string):
        if p in pos_words_set:
            keep.append(p)
    return " ".join(keep)

train_x = train_x.apply(lambda x : filter(x), axis=1)

...