Python如何从反馈文本中提取抽象名词与形容词
英文用户反馈形容词与抽象名词提取方案
- 第一步:词性标注过滤基础候选
先用NLTK词性标注能力拆分出文本中的形容词和名词,形容词直接作为结果保留,名词进入后续抽象性判断环节,示例代码如下:
import nltk from nltk.tokenize import word_tokenize from nltk.corpus import wordnet as wn # 首次运行需要下载依赖资源 nltk.download('punkt') nltk.download('averaged_perceptron_tagger') nltk.download('wordnet') def get_base_candidates(text): tokens = word_tokenize(text.lower()) tagged = nltk.pos_tag(tokens) adjectives = [] nouns = [] for word, tag in tagged: # 匹配所有形容词(原级、比较级、最高级) if tag.startswith('JJ'): adjectives.append(word) # 匹配所有名词(单数、复数) elif tag.startswith('NN'): nouns.append(word) return adjectives, nouns
- 第二步:抽象名词筛选
基于WordNet的上位词层级判断名词是否为抽象名词,原理是抽象名词的上位词最终会归属到abstraction分类,具体名词最终归属到physical_entity分类,判断函数示例:
def is_abstract_noun(noun): synsets = wn.synsets(noun, pos=wn.NOUN) if not synsets: return False # 取使用频率最高的第一个同义词集做判断 target_syn = synsets[0] # 递归遍历所有上位词 queue = target_syn.hypernyms() while queue: current = queue.pop(0) hyper_name = current.name().split('.')[0] if hyper_name == 'abstraction': return True if hyper_name == 'physical_entity': return False queue.extend(current.hypernyms()) return False
若你的业务场景有大量未被WordNet收录的新词,可以自己维护自定义抽象名词白名单,判断时优先匹配白名单即可进一步提升准确率。如果需要处理大批量数据,也可以直接使用公开的抽象名词词表做匹配,运行效率更高。
- 第三步:批量处理DataFrame数据
封装提取逻辑,直接作用于DataFrame的清洗后文本列即可,示例代码:
import pandas as pd def extract_target_words(text): adj_list, noun_list = get_base_candidates(text) abstract_noun_list = [n for n in noun_list if is_abstract_noun(n)] # 拼接结果为空格分隔的字符串 return ' '.join(adj_list + abstract_noun_list) # 替换cleaned_review为你DataFrame中存储清洗后文本的列名 df['extracted_result'] = df['cleaned_review'].apply(extract_target_words)
测试你给出的示例输入"smells good also nice taste in love with it",运行后输出结果为good nice love,完全符合要求。
内容的提问来源于stack exchange,提问作者Dynamo
相关产品推荐
相关产品推荐

