【问题标题】:Unable to tokenize sentences using gensim and nltk in python无法在 python 中使用 gensim 和 nltk 标记句子
【发布时间】:2017-06-17 23:20:19
【问题描述】:

我有一个标题列表:

> print(data)
> 
  0   Manager
  1   Electrician
  3   Carpenter
  4   Electrician & Carpenter
  ...

我正在尝试使用 gensim 查找最接近的相关标题。

我的代码是:

import os
import pandas as pd
import nltk
import gensim
from gensim import corpora, models, similarities
from nltk.tokenize import word_tokenize 

df = pd.read_csv('df.csv')
corpus = pd.DataFrame(df, columns=['Job Title'])
tokenized_sents = [word_tokenize(i) for i in corpus]

model = gensim.models.Word2Vec(tokenized_sents, min_count=1)

model.most_similar("Electrician")

当我运行标记化以将每个标题标记为一个句子(tokenized_sents 变量)时,它只标记标题:

> tokenzied_sents 
> [['Job', 'Title']]

我做错了什么?

【问题讨论】:

    标签: python pandas nltk tokenize gensim


    【解决方案1】:

    当您遍历 pd.DataFrame 时,它会返回它的

    In [9]: df = pd.DataFrame(np.random.randint(0,10, (10,3)), columns=list('abc'))
    
    In [10]: df
    Out[10]:
       a  b  c
    0  0  7  3
    1  5  0  5
    2  7  7  9
    3  2  0  0
    4  6  9  2
    5  8  5  2
    6  5  0  2
    7  3  2  5
    8  4  8  6
    9  0  5  1
    
    In [11]: [c for c in df]
    Out[11]: ['a', 'b', 'c']
    

    我想你可能想要:

    [word_tokenize(i) for i in corpus['Job Title']]
    

    由于您要遍历'Job Title' 列中的值,所以:

    In [12]: [c for c in df['a']]
    Out[12]: [0, 5, 7, 2, 6, 8, 5, 3, 4, 0]
    
    In [13]: [c + 10 for c in df['a']]
    Out[13]: [10, 15, 17, 12, 16, 18, 15, 13, 14, 10]
    

    不过,您可能完全不用pandas,因为gensim 倾向于处理惰性流,而据我所知,您只是使用pandas 读取csv 文件。

    【讨论】:

    • 我可以使用 corpus['Job TItle'][i] 进行迭代,但是,当我进入 model.most_similar("Manager") 时,我得到一个错误'word'Product Manager '不在词汇表中'。我应该在哪里指定词汇表?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-29
    • 2011-08-12
    • 2022-09-30
    • 2012-12-15
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    相关资源
    最近更新 更多