如何自动实现词性标注(part of speech tagging)与词形还原(lemmatization)
自动生成WordNet词形还原词性映射的方法
我们可以借助NLTK库的自动词性标注能力,先对文本完成分词和词性标注,再将NLTK的词性标签映射为WordNet支持的标签类型,完全替代手动配置环节。
前置依赖准备
你需要先安装NLTK库并下载所需数据,执行以下代码完成准备(下载仅需运行一次):
import nltk nltk.download(['punkt', 'averaged_perceptron_tagger', 'wordnet']) from nltk.stem import WordNetLemmatizer from nltk.corpus import wordnet from nltk.tokenize import word_tokenize
核心标签转换逻辑
NLTK返回的词性标签和WordNet要求的标签格式不匹配,需要先做一层格式转换:
def get_wordnet_pos(nltk_tag): """将NLTK的词性标签转换为WordNet支持的标签格式""" if nltk_tag.startswith('J'): return wordnet.ADJ elif nltk_tag.startswith('V'): return wordnet.VERB elif nltk_tag.startswith('N'): return wordnet.NOUN elif nltk_tag.startswith('R'): return wordnet.ADV # 其他词性默认按名词处理,可根据需求调整 else: return wordnet.NOUN
完整实现代码
直接输入原始文本即可自动生成你需要的word_type映射:
# 你的原始文本 raw_text = "International companies had interns" # 1. 自动分词 tokens = word_tokenize(raw_text) # 2. 自动词性标注 nltk_tags = nltk.pos_tag(tokens) # 3. 生成word_type映射 word_type = {token: get_wordnet_pos(tag) for token, tag in nltk_tags} # 后续词形还原逻辑和之前完全一致 lemmatizer = WordNetLemmatizer() token_list = [] for token in tokens: token_list.append(lemmatizer.lemmatize(token, word_type[token]))
生成的word_type最终输出为:
{'International': 'a', 'companies': 'n', 'had': 'v', 'interns': 'n'}
其中a对应wordnet.ADJ、n对应wordnet.NOUN、v对应wordnet.VERB,和你手动配置的映射完全等价。
内容的提问来源于stack exchange,提问作者laser
相关产品推荐
相关产品推荐

