NUM_SENTENCES:breakif'\t'notin line:continu。机器翻译:谷歌翻译是如何对几乎所有语言进行翻译的?( 三 )。" />

机器翻译:谷歌翻译是如何对几乎所有语言进行翻译的?( 三 )


input_sentences = []output_sentences = []output_sentences_inputs = []count =0for line inopen('./drive/MyDrive/fra.txt', encoding="utf-8"):count +=1if count >NUM_SENTENCES:breakif'\t'notin line:continueinput_sentence = line.rstrip().split('\t')[0]output = line.rstrip().split('\t')[1]output_sentence = output +' 'output_sentence_input =' '+ outputinput_sentences.append(input_sentence)output_sentences.append(output_sentence)output_sentences_inputs.append(output_sentence_input)print("Number ofsample input:", len(input_sentences))print("Number ofsample output:", len(output_sentences))print("Number ofsample output input:", len(output_sentences_inputs))Output:Number of sample input: 20000Number of sample output: 20000Number of sample output input: 20000在上面的脚本中创建input_sentences[]、output_sentences[]和output_sentences_inputs[]这三个列表 。 接下来 , 在for循环中 , 逐个读取每行fra.txt文件 。 每一行都在制表符出现的位置被分为两个子字符串 。 左边的子字符串(英语句子)插入到input_sentences[]列表中 。 制表符右边的子字符串是相应的法语译文 。
此处表示句子结束的标记被添加到已翻译句子的前面 。 同理 , 表示“句子开始”的标记和已翻译句子的开头相连接 。 还是从列表中随机打印一个句子:
print("English sentence: ",input_sentences[180])print("French translation: ",output_sentences[180])Output:English sentence:Join us.French translation:Joignez-vous à nous.标记和填充
下一步是标记原句和译文 , 并填充长度大于或小于某一特定长度的句子 。 对于输入而言 , 该长度将是输入句子的最大长度 。 对于输出而言 , 它也是输出句子的最大长度 。 在此之前 , 先设想一下句子的长度 。 将分别在两个单独的英语和法语列表中获取所有句子的长度 。
eng_len = []fren_len = []# populate thelists with sentence lengthsfor i ininput_sentences:eng_len.append(len(i.split()))for i inoutput_sentences:fren_len.append(len(i.split()))length_df = pd.DataFrame({'english':eng_len, 'french':fren_len})length_df.hist(bins =20)plt.show()
机器翻译:谷歌翻译是如何对几乎所有语言进行翻译的?文章插图
上面的直方图显示 , 法语句子的最大长度为12 , 英语句子的最大长度为6 。
接下来 , 用Keras的Tokenizer()类矢量化文本数据 。 句子将因此变为整数序列 。 然后 , 用零填充这些序列 , 使它们长度相等 。
标记器类的word_index属性返回一个单词索引词典 , 其中键表示单词 , 值表示对应的整数 。 最后 , 上述脚本打印出词典中唯一单词的数量和输入的最长英文句子的长度 。
#tokenize the input sentences(inputlanguage)input_tokenizer =Tokenizer(num_words=MAX_NUM_WORDS)input_tokenizer.fit_on_texts(input_sentences)input_integer_seq = input_tokenizer.texts_to_sequences(input_sentences)print(input_integer_seq)word2idx_inputs =input_tokenizer.word_indexprint('Total uniquewords in the input: %s'%len(word2idx_inputs))max_input_len =max(len(sen) for sen in input_integer_seq)print("Length oflongest sentence in input: %g"% max_input_len)Output:Total unique words in the input: 3501Length of longest sentence in input: 6同样 , 输出语句也可以用相同的方式标记:


推荐阅读