删除 python 中的停用词

Remove Stopwords in python

我正在开发一种算法来删除停用词。 我正在将一个 txt 文件转换为一个列表,从而传入删除算法。

文件行示例:

'mora vai nascer viver cair falar','positivo'
'deixa ver entendi vai crescer vai passar ve','positivo'
'so deveria ter foi agradeco de passei passei fez','positivo'
'nunca nao nao muito nao mais','negativo'
'a nao ate infelizmente ai ate quando','negativo'
'nao perto nao quanto menos nao sim nao nem simplesmente','negativo'

代码

with open('BasePalavras.txt') as arquivo:
     baseTeste = [linha.strip() for linha in arquivo]


stopwords = ['a', 'agora', 'algum', 'alguma', 'aquele', 'aqueles', 'de', 'deu', 'do', 'e', 'estou', 'esta', 'esta',
         'ir', 'meu', 'muito', 'mesmo', 'no', 'nossa', 'o', 'outro', 'para', 'que', 'sem', 'talvez', 'tem', 'tendo',
         'tenha', 'teve', 'tive', 'todo', 'um', 'uma', 'umas', 'uns', 'vou']

def removestopword(texto):
     frases=[]
     for(palavras, emocao) in texto:
         semstopwords = [p for p in palavras.splits() if p not in stopwords]
         frases.append((semstopwords, emocao))
return frases

print (removestopword(baseTeste))

错误

Traceback (most recent call last):
     File "C:/Users/Rivaldo/PycharmProjects/Mineracao/Principal.py", line 22, in <module>
          print (removestopword(baseTeste))
     File "C:/Users/Rivaldo/PycharmProjects/Mineracao/Principal.py", line 17, in removestopword
          for(palavras, emocao) in texto:
   ValueError: too many values to unpack

试试这个:

with open('BasePalavras.txt') as arquivo:
    baseTeste = [linha.strip().split(',') for linha in arquivo]


stopwords = ['a', 'agora', 'algum', 'alguma', 'aquele', 'aqueles', 'de', 'deu', 'do', 'e', 'estou', 'esta', 'esta',
         'ir', 'meu', 'muito', 'mesmo', 'no', 'nossa', 'o', 'outro', 'para', 'que', 'sem', 'talvez', 'tem', 'tendo',
         'tenha', 'teve', 'tive', 'todo', 'um', 'uma', 'umas', 'uns', 'vou']

def removestopword(texto):
    frases=[]
    for (palavras, emocao) in texto:
        semstopwords = [p for p in palavras.split() if p not in stopwords]
        frases.append((semstopwords, emocao))
    return frases

print (removestopword(baseTeste))

已将 baseTeste = [linha.strip() for linha in arquivo] 更改为 baseTeste = [linha.strip().split(',') for linha in arquivo]

semstopwords = [p for p in palavras.splits() if p not in stopwords]semstopwords = [p for p in palavras.split() if p not in stopwords].

这是我的做法。

stopwords = ['a', 'agora', 'algum', 'alguma', 'aquele', 'aqueles', 'de', 'deu', 'do', 'e', 'estou', 'esta', 'esta',
     'ir', 'meu', 'muito', 'mesmo', 'no', 'nossa', 'o', 'outro', 'para', 'que', 'sem', 'talvez', 'tem', 'tendo',
     'tenha', 'teve', 'tive', 'todo', 'um', 'uma', 'umas', 'uns', 'vou']

def remove_stopwords(text):
    phrases = []
    for (sentence, _) in text:
        sentence_without_stopwords = [word for word in sentence.split() if word not in stopwords]
        phrases.append(sentence_without_stopwords)
    return phrases

with open('input.txt') as raw_text:
    sentence_sentiments = []
    lines = [line for line in raw_text]
    for line in lines:
        sentence, sentiment = line.split(',')
        sentence_sentiments.append((sentence[1:-1], sentiment[1:-1]))
    print(remove_stopwords(sentence_sentiments))

请注意,在您提供的代码中,baseTeste 是一个包含字符串列表的数组,表示输入文件的行。这不是您想要的,因为您正试图在这些行内的 (sentence, sentiment) 对上循环 (for(palavras, emocao) in texto:)。因此,您错过了将每行拆分为 (sentence, sentiment) 对的中间步骤。