слово не в словаре - PullRequest
       15

слово не в словаре

3 голосов
/ 10 июня 2019

При первом использовании 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'])

Я ожидал бы, что он определит слово «солнечный» в предложении и распечатает вектор, тогда я смогу найти похожие слова. Я получаю error:

Слово «Солнечный» отсутствует в словаре »

Ответы [ 2 ]

0 голосов
/ 11 июня 2019

Это просто потому, что Solar не в вашем корпусе.

Word2Vec пытается генерировать векторы слов для каждого слова в вашем tokens_sentences.Если в учебном корпусе нет слова / токена, который вы пытаетесь найти, у word2vec не будет слова-слова для этого слова, и именно поэтому вы получили ошибку.

Совет: попробуйте сделатьтекстовые данные без учета регистра.То есть, весь текст должен быть в нижнем регистре (верхний регистр тоже работает, но не в соглашении.)

0 голосов
/ 10 июня 2019

Просто обработайте ошибки как исключения при возникновении первого цикла.

# 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
...