Ошибка ввода-вывода: [Ошибка №: 21] является каталогом: './w2v-model/wordmodel3' - PullRequest
0 голосов
/ 28 марта 2020
def generate_w2vModel(decTokenFlawPath, w2vModelPath):
    print("training...")
    model = Word2Vec(sentences= DirofCorpus(decTokenFlawPath), size=30, alpha=0.01, window=5, min_count=0, max_vocab_size=None, sample=0.001, seed=1, workers=1, min_alpha=0.0001, sg=1, hs=0, negative=10, iter=5)
    model.save(w2vModelPath)

def evaluate_w2vModel(w2vModelPath):
    print("\nevaluating...")
    model = Word2Vec.load(w2vModelPath)
    for sign in ['(', '+', '-', '*', 'main']:
        print(sign, ":")
        print(model.most_similar_cosmul(positive=[sign], topn=10))

def main():
    dec_tokenFlaw_path = ['./data/cdg_ddg/corpus/']
    w2v_model_path = "./w2v_model/wordmodel3" 
    generate_w2vModel(dec_tokenFlaw_path, w2v_model_path)
    evaluate_w2vModel(w2v_model_path)
    print("success!")

это python, на котором я работал. Этот файл используется для обучения модели word2ve c. Входные данные - это файлы корпусов, а выходные - модель word2ve c. я получил следующую ошибку:

Traceback (most recent call last):
  File "create_w2vmodel.py", line 67, in <module>
    main()
  File "create_w2vmodel.py", line 62, in main
    generate_w2vModel(dec_tokenFlaw_path, w2v_model_path)
  File "create_w2vmodel.py", line 50, in generate_w2vModel
    model.save(w2vModelPath)
  File "/usr/local/lib/python2.7/dist-packages/gensim-3.4.0-py2.7-linux-x86_64.egg/gensim/models/word2vec.py", line 930, in save
    super(Word2Vec, self).save(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/gensim-3.4.0-py2.7-linux-x86_64.egg/gensim/models/base_any2vec.py", line 281, in save
    super(BaseAny2VecModel, self).save(fname_or_handle, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/gensim-3.4.0-py2.7-linux-x86_64.egg/gensim/utils.py", line 691, in save
    self._smart_save(fname_or_handle, separately, sep_limit, ignore, pickle_protocol=pickle_protocol)
  File "/usr/local/lib/python2.7/dist-packages/gensim-3.4.0-py2.7-linux-x86_64.egg/gensim/utils.py", line 550, in _smart_save
    pickle(self, fname, protocol=pickle_protocol)
  File "/usr/local/lib/python2.7/dist-packages/gensim-3.4.0-py2.7-linux-x86_64.egg/gensim/utils.py", line 1311, in pickle
    with smart_open(fname, 'wb') as fout:  # 'b' for binary, needed on Windows
  File "build/bdist.linux-x86_64/egg/smart_open/smart_open_lib.py", line 89, in smart_open
  File "build/bdist.linux-x86_64/egg/smart_open/smart_open_lib.py", line 301, in file_smart_open
IOError: [Errno 21] Is a directory: './w2v_model/wordmodel3'

, пожалуйста, помогите мне изменить эту конкретную ошибку. я думаю, что нет такой папки, но я уже создал w2v_model / wordmodel3 в моей папке. Я пробовал это во многих отношениях. Я предоставлю файл программы smart_open_lib.py ниже:

def file_smart_open(fname, mode='rb'):
    """
    Stream from/to local filesystem, transparently (de)compressing gzip and bz2
    files if necessary.

    """
    _, ext = os.path.splitext(fname)

    if ext == '.bz2':
        PY2 = sys.version_info[0] == 2
        if PY2:
            from bz2file import BZ2File
        else:
            from bz2 import BZ2File
        return make_closing(BZ2File)(fname, mode)

    if ext == '.gz':
        from gzip import GzipFile
        return make_closing(GzipFile)(fname, mode)

    return open(fname, mode)

Это код трассировки, который они сообщают. Просьба помочь мне изменить эту ошибку !!!

1 Ответ

0 голосов
/ 29 марта 2020

Для метода Word2Vec .save() требуется новый путь к имени файла (не к каталогу!), В который вы хотите сохранить основной файл модели. (Для большинства моделей значительного размера наряду с этим основным файлом будут добавлены дополнительные файлы с другими расширениями, которые также являются частью сохранения модели.)

Если вы указываете путь к существующему каталогу , вы получите ошибку, подобную этой.

Измените w2v_model_path на путь к нужному имени файла, а не к уже существующему каталогу. (Возможно, этот путь будет внутри этого каталога. Но это не должен быть сам каталог!)

...