如何打印 python 中的匹配词
how to print the matched words in python
我有一个文本文件和 2 个用户定义的正负文件。我正在将 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']]
一个好的开始是在 assign_comments_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:
要每个句子 return 个多个关键字,您可以将代码修改为 return 个列表;
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)
希望对您有所帮助
我有一个文本文件和 2 个用户定义的正负文件。我正在将 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']]
一个好的开始是在 assign_comments_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:
要每个句子 return 个多个关键字,您可以将代码修改为 return 个列表;
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)
希望对您有所帮助