首次使用word2vec
,并且正在使用的文件为XML
格式。我想遍历专利以找到每个标题,然后应用word2vec
来查看是否有相似的词(以表示相似的标题)。
到目前为止,我已经使用元素树解析了XML文件以检索每个标题,然后我应用了sent_tokenizer
,然后使用了tweet tokenizer
返回了一个单词列表,其中每个单词都被标记了(不是确定这是否是最好的方法)。然后,我将标记化的句子放入我的word2vec
模型中,并用一个词进行测试以查看其是否返回向量。这似乎仅适用于第一句话中的一个单词。我不确定它是否能识别所有句子?
import numpy as np
import pandas as pd
import gensim
import nltk
import xml.etree.ElementTree as ET
from gensim.models.word2vec import Word2Vec
from nltk.tokenize import word_tokenize
from nltk.tokenize import sent_tokenize
from nltk.corpus import stopwords
from nltk.tokenize import TweetTokenizer, sent_tokenize
tree = ET.parse('6785.xml')
root = tree.getroot()
for child in root.iter("Title"):
Patent_Title = child.text
sentence = Patent_Title
stopWords = set(stopwords.words('english'))
tokens = nltk.sent_tokenize(sentence)
print(tokens)
tokenizer_words = TweetTokenizer()
tokens_sentences = [tokenizer_words.tokenize(t) for t in tokens]
#print(tokens_sentences)
model = gensim.models.Word2Vec(tokens_sentences, min_count=1,size=32)
words = list(model.wv.vocab)
print(words)
print(model['Solar'])
我希望它能够识别句子中的“太阳能”一词并打印出矢量,然后我才能寻找相似的词。我收到error
:
单词'Solar'不在词汇表中
答案 0 :(得分:0)
只需将错误作为第一次循环发生时的例外处理即可。
# print(model['Solar'])
try:
print(model['Solar'])
except Exception as e:
pass
工作代码:
import numpy as np
import pandas as pd
import gensim
import nltk
import xml.etree.ElementTree as ET
from gensim.models.word2vec import Word2Vec
from nltk.tokenize import word_tokenize
from nltk.tokenize import sent_tokenize
from nltk.corpus import stopwords
from nltk.tokenize import TweetTokenizer, sent_tokenize
tree = ET.parse('6785.xml')
root = tree.getroot()
for child in root.iter("Title"):
Patent_Title = child.text
sentence = Patent_Title
stopWords = set(stopwords.words('english'))
tokens = nltk.sent_tokenize(sentence)
print(tokens)
tokenizer_words = TweetTokenizer()
tokens_sentences = [tokenizer_words.tokenize(t) for t in tokens]
#print(tokens_sentences)
model = gensim.models.Word2Vec(tokens_sentences, min_count=1,size=32)
words = list(model.wv.vocab)
print(words)
try:
print(model['Solar'])
except Exception as e:
pass
答案 1 :(得分:0)
这仅仅是因为Solar
不在您的语料库中。
Word2Vec
尝试为您的tokens_sentences
中的每个单词 生成单词向量。如果训练语料库中没有您尝试查找的单词/令牌,则word2vec将没有该单词的单词向量,这就是为什么您会出错的原因。
建议:尝试使文本数据不区分大小写。也就是说,将所有文本都小写(大写也可以,但惯例不行。)