本人在学习NLP词义消歧,计划使用wordnet作为词库并使用wordnet的omw来进行中文词义消歧,但是在编程过程中发现如果使用中文来查找对应义项时,中文词义的覆盖范围可能不如英文广泛。如下代码所示:
import nltk
nltk.download('wordnet') # 下载英文的wordnet
nltk.download('omw') # wordnet提供的多语言组件Open Multilingual Wordnet
import jieba
from nltk.corpus import wordnet
from sklearn.feature_extraction.text import TfidfVectorizer
# 以下函数实现获取停用词表
def get_stopword(file_path,encoding='utf-8'):
stopwords = set()
with open(file_path, "r",encoding=encoding) as f:
for line in f:
stopwords.add(line.strip())
return stopwords
file_path = r"C:\NLPWSD\stopword\hit_stopwords.txt"
stopwords = get_stopword(file_path,encoding="utf-8")
# 获取停用词表stopword
sentence = "火箭队在今天战胜了湖人队"
wsdword = "火箭"
#使用jieba进行分词
jieba.add_word(wsdword)
sent_words = list(jieba.cut(sentence, cut_all=False))
sentence_cut = []
# 如果jieba切分后的词不在停用词表中,说明不是停用词,加入sentence_cut
for word in sent_words:
if word not in stopwords:
sentence_cut.append(word)
# sentence_cut: ['火箭队', '今天', '战胜', '湖人队']
#获取待消歧词的所有词义,存于集合synsets
synsets = wordnet.synsets(wsdword,lang='cmn')
print(synsets)
#synsets包含的是待消歧词汇全部的义项
sentence是待消歧语句,wsdword是待消歧词,
最后得到的结果是:[Synset('rocket.n.01')]
结果中只获得了火箭的一个义项:any vehicle self-propelled by a rocket engine,这显然与预期不符。
所以向各位提问,可以推荐一些适合解决NLP的词义消歧的任务的中文词库吗?