【问题标题】:How to create custom one hot encoding by keywords on text sequences如何通过文本序列上的关键字创建自定义一种热编码
【发布时间】:2020-04-23 23:37:29
【问题描述】:

我有一个如下所示的文本序列列表:

    sequences = [
    ['okay', ''],
    ['ahead', 'fred', ''],
    ['i', 'dont', 'remember', 'you', 'want', 'to', 'go', ''],
    ['um', ''],
    ['let', 'me', 'think', '']
]

我想为每个序列创建一个热向量,用于计算列表中某些单词的出现次数。要查找的单词列表在这里:


    keywords = ['i', 'you', 'we']

最终,我想遍历每个文本序列并返回以下内容(其中 0 表示关键字不存在,1 表示存在):


    seq_to_vec = [
        [0,0,0],
        [0,0,0],
        [1,1,0],
        [0,0,0],
        [0,0,0]
    ]

我该怎么做?

【问题讨论】:

    标签: python vector text nlp


    【解决方案1】:

    这是一个相当简单(对 Python 来说很简单)的列表理解:

    [[1 if keyword in sequence else 0 for keyword in keywords] for sequence in sequences]
    

    下面的完整程序展示了这一点:

    sequences = [
        ['okay', ''],
        ['ahead', 'fred', ''],
        ['i', 'dont', 'remember', 'you', 'want', 'to', 'go', ''],
        ['um', ''],
        ['let', 'me', 'think', '']
    ]
    keywords = ['i', 'you', 'we']
    
    print([[1 if keyword in sequence else 0 for keyword in keywords] for sequence in sequences])
    

    正如预期的那样,输出是:

    [[0, 0, 0], [0, 0, 0], [1, 1, 0], [0, 0, 0], [0, 0, 0]]
    

    请注意,这是基于您的“其中 0 表示关键字不存在而 1 表示存在”文本,这意味着它不适合出现两次的同一个词。如果您在第三个序列中复制i,您仍然只会在该位置获得1,而不是2

    如果您想要一个实际的 count 而不是 0/1 存在指示符(基于您的“计数出现”文本),它会稍微复杂一些,但仍然使用相同的基本思想:

    [[sum([1 if keyword == word else 0 for word in sequence]) for keyword in keywords] for sequence in sequences]
    

    在第三个序列中复制i 然后将交付给您:

    [[0, 0, 0], [0, 0, 0], [2, 1, 0], [0, 0, 0], [0, 0, 0]]
    

    【讨论】:

    • 这是完美的,谢谢!出于好奇,您将如何编辑它,而不是产生 0 或 1,而是产生该序列中的关键字计数?例如,如果“i”在第三个(python 中的第二个)序列中出现两次,则结果向量将为 [2,1,0]。
    【解决方案2】:

    这是一个可能的解决方案,使用列表理解和列表count() 方法

    def sequences_to_num_of_ocuerences_vector(sequences, keywords):
        return [[seq.count(k) for k in keywords] for seq in sequences]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-28
      • 2019-09-24
      • 2016-03-19
      • 1970-01-01
      • 2020-12-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多