我有一个包含usertype,ID和属性描述的excel数据集。我在dataframe(df)中的python pandas中导入了这个文件。
现在我想将desciption中的内容分成一个单词,两个单词和三个单词。我可以在NLTK库的帮助下进行一个单词标记化。但我被困在两个和三个字的标记化。例如,列Description
中的一行有句子
位于孟买主干道的全新住宅公寓,配有便携式水。
我希望将这句话拆分为
“A Brand”,“全新”,“新住宅”,“住宅公寓”......“便携式水”。
这个分裂应该反映在该列的每一行。
答案 0 :(得分:1)
以下是使用ngrams
中的nltk
的小例子。希望它有所帮助:
from nltk.util import ngrams
from nltk import word_tokenize
# Creating test dataframe
df = pd.DataFrame({'text': ['my first sentence',
'this is the second sentence',
'third sent of the dataframe']})
print(df)
输入dataframe
:
text
0 my first sentence
1 this is the second sentence
2 third sent of the dataframe
现在,我们可以将ngrams与word_tokenize
一起用于bigrams
和trigrams
,并将其应用于数据帧的每一行。对于bigram,我们将2
的值传递给ngrams函数以及标记化的单词,而3
的值则传递给三元组。 ngrams
返回的结果类型为generator
,因此会转换为列表。对于每一行,bigrams
和trigrams
的列表都保存在不同的列中。
df['bigram'] = df['text'].apply(lambda row: list(ngrams(word_tokenize(row), 2)))
df['trigram'] = df['text'].apply(lambda row: list(ngrams(word_tokenize(row), 3)))
print(df)
结果:
text \
0 my first sentence
1 this is the second sentence
2 third sent of the dataframe
bigram \
0 [(my, first), (first, sentence)]
1 [(this, is), (is, the), (the, second), (second, sentence)]
2 [(third, sent), (sent, of), (of, the), (the, dataframe)]
trigram
0 [(my, first, sentence)]
1 [(this, is, the), (is, the, second), (the, second, sentence)]
2 [(third, sent, of), (sent, of, the), (of, the, dataframe)]