2017-06-17 3 views
0

Ich habe eine Liste der Titel:Unable Sätze tokenize GENSIM und nltk in Python mit

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

ich die am engsten verwandten Titel zu finden, zu verwenden versuche GENSIM.

Der Code, den ich habe, ist:

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") 

Wenn ich tokenization leite jeden Titel als Satz (tokenized_sents Variable) tokenize, es tokenizes nur den Header:

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

Was bin ich falsch machen?

Antwort

0

Wenn Sie über einen pd.DataFrame laufen, gibt es es Spalten:

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'] 

Ich glaube, Sie wollen wahrscheinlich:

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

Da Sie über die Werte in der Spalte iterieren wollen 'Job Title' , so:

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] 

Obwohl Sie wahrscheinlich nur pandas insgesamt verzichten können, da gensim neigt dazu, mit Lazy Streams arbeiten, und Sie verwenden nur pandas, um eine CSV-Dateien zu lesen, soweit ich das beurteilen kann.

+0

Ich bin in der Lage, mit Corpus ['Job TItle'] [i] zu iterieren, aber wenn ich zu Model.most_similar ("Manager") komme, erhalte ich einen Fehler 'Wort' Product Manager 'nicht im Wortschatz' . Wo würde ich das Vokabular angeben? –

Verwandte Themen