我有一个单词嵌入矩阵,它像-
([["word1","word2"...],["word6","word5"....],[...],[....]......])
这里数组是句子,单词是嵌入, 嵌入的形状为(100,)
不是所有的句子都具有相同的长度,我希望所有的句子都具有相同的长度,我想如何填充和修剪呢?
答案 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)
如果您想要零长度的差向量:
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)
答案 1 :(得分:0)
我认为您完成了词干处理。
下一步,您需要考虑如何制作包括文本之间相似度在内的数据。通常使用BOW和TD-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']]