我正在尝试为一系列的评论文本(SemEval,2014年)实现布朗集群的一个版本。我正在使用Owoputi等人(2013年)的twitter集群,它们如下所示:
0000 ijust 1446
0000 i 17071657
0000 -i 4254
000100 iyou 41
000100 #innowayshapeorform 41
其中位字符串指示集群,并且有1000个集群。
我已经提取到字典中,在字典中,我将相关的位字符串作为键,并将令牌的列表作为值。
{'0000': ['ijust', 'i', '-i'], '000100': ['iyou', #innowayshapeorform] ...}
我只是遗漏了如何对文本进行热编码,将字典键映射到向量(一维数组)中的索引的部分:
这样,如果文本中出现一个单词,而该单词发生在集群中,则群集的值将从0更改为1。
例如one_hot_vector = *3
。
文字1:我讨厌猫
文本1矢量表示: 1,0,1
课文2:狗爱我
文本2矢量表示: 1,1,1
课文3:我梦到羊
文本3矢量表示: 1,0,0
这个例子有3个集群--我拥有的集群长度应该是1000维。
发布于 2020-06-21 07:33:41
你的问题很难破译,所以让我把它正规化。到目前为止,我所了解的是:
您想要将给定的字符串映射到一维数组的a
.
d
中,如果text
包含d[key]
、== 0
或其他任何一个== 0
,则将cluster
映射到a
中的cluster
位置ix
列表中,对应于a
中的某些key
。以下解决方案看起来很优雅:
keys = sorted(d.keys())
def text2vec(text):
words = text.lower().split()
return [
int(any(
(d[key] in word) for word in words
)) for key in keys
]
测试示例:
test_text = "did ijust atealldonuts"
token = text2vec(test_text)
assert 1 == token[keys.index("ijust")]
assert 0 == token[keys.index("i")]
如果我弄错了,请改进你的问题,特别是一个热点部分。
不确定DictVectorizer
将如何帮助您,因为它会转换字典,而您希望转换一段文本。(基本上,DictVectorizer
从它的json恢复数据。)
https://stackoverflow.com/questions/62486626
复制相似问题