Python 如何获得一个句子的热编码?

Python 如何获得一个句子的热编码?,python,pandas,Python,Pandas,我有一个包含一个句子的列表,我想对每个单词中的完整句子进行一次热编码 比如说, sentences = [ "python, java", "linux, windows, ubuntu", "java, linux, ubuntu, windows", "performance, python, mac" ] 我想要这样的输出 java linux mac performance python ubuntu windows 0 1 0

我有一个包含一个句子的列表,我想对每个单词中的完整句子进行一次热编码

比如说,

sentences = [
  "python, java",
  "linux, windows, ubuntu",
  "java, linux, ubuntu, windows",
  "performance, python, mac"
]
我想要这样的输出

   java  linux  mac  performance  python  ubuntu  windows
0     1      0    0            0       1       0        0
1     0      1    0            0       0       1        1
2     1      1    0            0       0       1        1
3     0      0    1            1       1       0        0
我的尝试

我试着将我的句子转换成系列,然后执行
get_dummies
,但我得到的是每个单词,而不是句子

print pd.get_dummies(pd.Series(sum([tag.split(', ') for tag in sentences],[])))
O/p

如何解决此问题?

与列表理解一起使用
拆分

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform([x.split(', ') for x in sentences]),columns=mlb.classes_)
print (df)
   java  linux  mac  performance  python  ubuntu  windows
0     1      0    0            0       1       0        0
1     0      1    0            0       0       1        1
2     1      1    0            0       0       1        1
3     0      0    1            1       1       0        0
另一个解决方案包括:

性能不同:

sentences = sentences * 1000

In [166]: %%timeit
     ...: mlb = MultiLabelBinarizer()
     ...: df = pd.DataFrame(mlb.fit_transform([x.split(', ') for x in sentences]),columns=mlb.classes_)
     ...: 
8.06 ms ± 179 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [167]: %%timeit
     ...: pd.Series(sentences).str.get_dummies(', ')
     ...: 
105 ms ± 1.33 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
与列表理解一起用于
拆分

from sklearn.preprocessing import MultiLabelBinarizer

mlb = MultiLabelBinarizer()
df = pd.DataFrame(mlb.fit_transform([x.split(', ') for x in sentences]),columns=mlb.classes_)
print (df)
   java  linux  mac  performance  python  ubuntu  windows
0     1      0    0            0       1       0        0
1     0      1    0            0       0       1        1
2     1      1    0            0       0       1        1
3     0      0    1            1       1       0        0
另一个解决方案包括:

性能不同:

sentences = sentences * 1000

In [166]: %%timeit
     ...: mlb = MultiLabelBinarizer()
     ...: df = pd.DataFrame(mlb.fit_transform([x.split(', ') for x in sentences]),columns=mlb.classes_)
     ...: 
8.06 ms ± 179 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

In [167]: %%timeit
     ...: pd.Series(sentences).str.get_dummies(', ')
     ...: 
105 ms ± 1.33 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)

你跑得多快啊!!!真是太神奇了,我花了5分钟来回答这个问题,但你只花了1分钟就回答了。真是难以置信@MohamedThasinah-你很快,我创造了10-20分钟的问题。这比回答更难…@MohamedThasinah,正是我的想法,答案不到一分钟就准备好了。。。太棒了。你跑得多快啊!!!真是太神奇了,我花了5分钟来回答这个问题,但你只花了1分钟就回答了。真是难以置信@MohamedThasinah-你很快,我创造了10-20分钟的问题。这比回答更难…@MohamedThasinah,正是我的想法,答案不到一分钟就准备好了。。。太神了