如何优雅地实现dicts中文本的(棕色)集群表示作为文本分类器的特征?

2024-09-26 21:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为一系列评论文本实现一个版本的Brown clusters(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] ...}

我只是缺少了如何将字典键映射到向量(1d数组)中的索引的文本进行热编码的部分:

这样,如果一个单词出现在文本中,并且该单词出现在集群中,那么集群的值将从0更改为1

例如。 一个热向量=[0]*3

  • 簇1(向量索引=0):['I','me','my','mine']
  • 集群2(向量索引=1):[“爱”、“喜欢”、“想要”、“需要”]
  • 第三组(病媒指数=2):[‘狗’、‘宠物’、‘猫’、‘小狗’]

课文1:我讨厌猫

文本1矢量表示:[1,0,1]

课文2:狗爱我

文本2矢量表示:[1,1,1]

课文3:我梦见羊

文本3矢量表示:[1,0,0]

这个例子有3个簇-我的簇长度为1000维


Tags: 字符串文本版本字典矢量评论集群单词
1条回答
网友
1楼 · 发布于 2024-09-26 21:41:45

你的问题很难理解,所以让我把它正式化一点。到目前为止,我所理解的是:

  • 您希望将给定的text字符串映射到一维数组a
  • 您有字典d,它将一些cluster映射到word列表
  • a中的每个位置ix对应于字典d中的一些key
  • a[ix] == 1如果text包含d[key]中的任何一个,则== 0否则

以下解决方案似乎足够优雅:

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转储中恢复数据帧

相关问题 更多 >

    热门问题