如何填充n维数组

时间:2019-05-12 11:10:06

标签: python nlp

我有一个单词嵌入矩阵,它像-


([["word1","word2"...],["word6","word5"....],[...],[....]......])

这里数组是句子,单词是嵌入, 嵌入的形状为(100,)

不是所有的句子都具有相同的长度,我希望所有的句子都具有相同的长度,我想如何填充和修剪呢?

3 个答案:

答案 0 :(得分:0)

这是我的尝试。我从一个简单的案例开始,其中有三个句子,一个句子包含5个单词,一个句子包含3个单词,一个句子包含4个单词。平均值为4,因此最后一句话保持不变,第一个句子被截断,第二个句子填充0。

sample_sentences = [[1,2,3,4,5],[1,2,3],[1,2,3,4]]

mean = 0
for element in sample_sentences:
    mean += len(element)

mean = mean/len(sample_sentences)

for element in sample_sentences:
    difference =0

    if (len(element)<mean):
        difference = int(mean)-len(element)
        for i in range (difference):
            element.append(0)


    if(len(element)>mean):
        del element[int(mean):]

print(sample_sentences)

输出: enter image description here

如果您想要零长度的差向量:

sample_sentences = [[1,2,3,4,5],[1,2,3],[1,2,3,4]]

mean = 0
for element in sample_sentences:
    mean += len(element)

mean = mean/len(sample_sentences)

for element in sample_sentences:
    difference =0

    if (len(element)<mean):
        difference = int(mean)-len(element)
        element.append([0 for x in range(difference)])


    if(len(element)>mean):
        del element[int(mean):]

print(sample_sentences)

输出: enter image description here

答案 1 :(得分:0)

我认为您完成了词干处理。

下一步,您需要考虑如何制作包括文本之间相似度在内的数据。通常使用BOW和TD-IDF。

请参阅这篇文章:https://skymind.ai/wiki/bagofwords-tf-idf

答案 2 :(得分:0)

考虑以下简单功能:将具有filler元素的列表扩展到更长的长度gl

def expand(x, gl, filler):
    n = gl - len(x)
    if n > 0:
        x.extend([filler]*n)

您可以使用此简单功能。如果您希望所有句子的长度都相同,则应该找到最长的句子,然后填充其他句子以匹配该长度:

matrix = [["word1", "word2", "myword3"],["word6", "word5"], ["a", "b", "c", "d"]]
maxlength = max(map(len, matrix)) #get the length of the longest sentence

for sentence in matrix:
    expand(sentence, maxlength, "0") #appending 0 to shorter sentences

print(matrix)

此打印:[['word1', 'word2', 'myword3', '0'], ['word6', 'word5', '0', '0'], ['a', 'b', 'c', 'd']]