我已經編寫了一個腳本,它基本上將句子中的所有字符串拆分爲多個部分;例如爲每個字符串添加特定字符python中的字符串列表
;
"geldigim" -> "gel" "di" "g" "i" "m"
雖然有些字符串可能會像上面那樣拆分,但其中的一些可能會拆分爲以下;
"bildi" > "bil" "di"
或者某些句子根本不能被分割。
"kos" -> "kos"
它完全取決於將字符串拆分爲多個部分的函數。
我想要做的是以下幾點:
geldigim -> /gel* *di* *g* *i* *m/
bildi -> /bil* *di/
kos -> /kos/
我做什麼;
我有一個有37251512句子的語料庫。我寫了下面的腳本;
if __name__ == "__main__":
io = morfessor.MorfessorIO()
print "Importing corpus ..."
f = codecs.open("corpus/corpus_tr_en/corpus.tr", encoding="utf-8").readlines()
print "Importing morphology model ..."
model = io.read_binary_model_file('seg/tr/model.bin')
corpus = open('dataset/dataset_tr_en/full_segmented.tr', 'w')
for a in range(len(f)):
print str(a) + ' : ' + str(len(f))
words = f[a].replace('\n', '').split()
line_str = ''
for word in words:
segmentation = model.viterbi_segment(word)[0]
if len(segmentation) == 1:
line_str = '/' + segmentation[0] + '/'
if len(segmentation) == 2:
line_str = '/' + segmentation[0] + '* *' + segmentation[1] + '/'
if len(segmentation) > 2:
line_str = ''
for b in range(len(segmentation)):
if (b == 0):
line_str = line_str + '/' + segmentation[b] + '*'
if (b != 0) and (b != (len(segmentation) - 1)):
line_str = line_str + ' *' + segmentation[b] + '* '
if (b == (len(segmentation) - 1)):
line_str = line_str + ' *' + segmentation[b] + '/'
line_str = line_str + ' '
corpus.write(line_str.encode('utf-8'))
corpus.write('\n')
corpus.close()
該腳本遍歷每個句子,句子中的每個單詞,並與io.read_binary_model_file
功能分成部分。
但它對我來說太貴了,它很慢。
你能否告訴我一種能使過程非常快速的方法?
感謝,
是什麼viterbi_segment()呢?你能發佈這個函數的代碼嗎? /Teşekkür* * ler/ – Ukimiku
它基本上是一個函數,它基本上適合字符串到由「Morfessor」創建的機器學習模型中。 – yusuf
我在問,因爲如果你給我們看代碼,也許有辦法加快它。 – Ukimiku