【问题标题】:how to print the matched words in python如何在python中打印匹配的单词
【发布时间】:2017-04-21 10:31:18
【问题描述】:

我有一个文本文件和 2 个用户定义的正负文件。我正在将两个文件中的单词与文本文件进行比较,并返回正数或负数。

但我需要在文本中打印这些关键字,将它们分类为正面或负面。

我正在寻找的输出示例:

file_name       IBM                         Keywords     Label

audio1.wav     The customer is good         good         Positive
audio2.wav     the service is bad           bad          Negative

请告诉我该怎么做。这是到目前为止的代码

pos = readwords('C:\\Users\\anagha\\Desktop\\SynehackData\\positive.txt')
neg = readwords('C:\\Users\\anagha\\Desktop\\SynehackData\\Negative.txt')

pos = [w.lower() for w in pos]
neg = [w.lower() for w in neg]

def assign_comments_labels(x):
    try:
        if any(w in x for w in pos) :      
            return 'positive'
        elif any(w in x for w in neg):
            return 'negative'
        else:
            return 'neutral'
    except:
        return 'neutral'

import pandas as pd
df = pd.read_csv("C:\\Users\\anagha\\Desktop\\SynehackData\\noise_free_audio\\outputfile.csv", encoding="utf-8") 

df['IBM'] = df['IBM'].str.lower()
df['file_name'] = df['file_name'].str.lower()

df['labels'] = df['IBM'].apply(lambda x: assign_comments_labels(x))

df[['file_name','IBM','labels']] 

【问题讨论】:

  • 你遇到了哪一部分的问题?
  • 我无法创建“关键字”列,根据这些词,它在“标签”列中将文本标记为正面或负面。我需要添加一个给出关键字的列

标签: python string python-3.x match search-keywords


【解决方案1】:

一个好的开始是在 assign_cmets_labels(x) 函数中有正确的缩进。 缩进整个主体。

已编辑答案
好的,我现在明白你的问题了;

根据您上面使用的逻辑,此代码应该适合您:

def get_keyword(x):
   x_ = x.split(" ")
   try:
      for word in x_:
         if (word in neg) or (word in pos):
            return word
   except:
      return -1

   return -1

然后可以像处理标签一样使用 lambda:

df['keywords'] = df['IBM'].apply(lambda x: get_keyword(x))

编辑 2
要每个句子返回多个关键字,您可以修改代码以返回列表;

def get_keyword(x):
   x_ = x.split(" ")
   keywords = []
   try:
      for word in x_:
         if (word in neg) or (word in pos):
            keywords.append(word)
   except:
      return -1

   return keywords

更好的解决方案是创建两个函数

  • get_pos_keywords(x)
  • get_neg_keywords(x)

您的 DataFrame 中的关键字将不再是一列,而是两列,一列用于 pos,另一列用于 neg。

通常文本会有正面和负面关键字,但是每个单词的权重会将句子的最终结果分类为正面或负面。如果这是您的情况,那么我强烈建议您实施第二种解决方案。

注意:
对于第二种解决方案,将 if 语句更改为

# For positive keywords function    
if word in pos:
    keywords.append(word)

# For negative keywords function
if word in neg:
    keywords.append(word)

希望有帮助

【讨论】:

  • 抱歉,在此处复制时,缩进被正确复制了。但是代码对我来说工作正常,我只需要创建关键字列,请告诉我如何去做
  • 是否可以修改为读取多个单词,例如“非常糟糕”、“没钱”等?
  • 是的,您可以对其进行修改以查找多个单词的表达式...您必须遍历关键字列表并使用 your_sentence.find(keyword) 函数。如果函数返回一个不同于 -1 的 int,这意味着你有一个匹配
猜你喜欢
  • 1970-01-01
  • 2019-08-17
  • 2015-04-29
  • 2014-12-13
  • 1970-01-01
  • 1970-01-01
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多