单词不在词汇表中

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (9)

第一次使用word2vec和我正在使用的文件是XML格式。我想迭代专利,找到每个标题,然后申请word2vec查看是否有相似的单词(表示相似的标题)。

到目前为止,我已经使用元素树解析了XML文件以检索每个标题,然后我已经应用sent_tokenizer了推文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'])

我希望它能在一个句子中识别出“solar”这个词并打印出矢量,然后我就可以寻找相似的词。我收到了error

单词'Solar'不在词汇中“

提问于
用户回答回答于

这只是因为Solar不在你的语料库中。

Word2Vec尝试生成词矢量的每个字你的tokens_sentences。如果训练语料库没有包含您尝试查找的单词/标记,则word2vec将没有单词vector用于该单词,这就是您收到错误的原因。

建议:尝试使您的文本数据不区分大小写。也就是说,将所有文本都设为小写(大写也可以,但不是约定。)

用户回答回答于

只需将错误处理为第一次循环出现的异常。

# 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

扫码关注云+社区

领取腾讯云代金券