我需要爲Bleu度量標準中的評估創建一個字對,三聯體等列表。 Bleu以unigrams(單個單詞)開始,並且上升到N-grams - N在運行時指定。在Bleu中創建用於評估的字對,三聯體等
例如,給出的句子 「以色列官員負責機場安全」
對於對unigram這純粹是詞的列表。對於二元語法這將是
Israeli officials
officials are
are responsible
responsible for
for airport
airport security
相關的八卦是
Israeli officials are
officials are responsible
are responsible for
responsible for aiport
for airport security
我編寫工作布魯硬編碼的n元語法4和暴力迫使對unigram等的計算,這是醜陋的地獄,此外,我需要能夠在運行時提供N.
該正試圖產生對/三元組等的片段 -
String current = "";
int temp = 0;
for (int i = 0; i < goldWords.length - N_GRAM_ORDER; i++) {
current = current + ":" + goldWords[i];
while (temp < N_GRAM_ORDER) {
current = current + ":" + goldWords[temp + i];
temp++;
}
goldNGrams.add(current);
current = "";
temp = 0;
}
}
編輯 - 所以從這個片斷的輸出應爲雙字母組 -
israeli:officials
officials:are
are:responsible
responsible:for
for:airport
airport:security
哪裏goldWords是含有字符串數組將單個詞彙變成NGrams。 我一直在修補這個循環好幾天,畫出關係等,它只是不會點擊我。任何人都可以看到我做錯了什麼?通過所有的話
String current = "";
for (int i = 0; i < goldWords.length(); i++){
for (int j = 0; j < N_GRAM_ORDER; j++){
if (i + j < goldWords.length())
current += ":" + goldWords[i + j];
}
goldNGrams.add(current);
current = "";
}
所以,通過第一字循環迭代外被收錄,內循環迭代:
如果我理解這個正確的,你只是受了多少空間有突破一串字,對嗎?難道你不能這樣做:使用String.split將輸入字符串拆分爲一個單詞數組,然後使用循環將它們重新組合爲N個。拋出一個命令行參數來確定N,並且你設置了 –
你將'goldWords [i]'加到'current'字符串兩次。一旦初始化'current'時,再次使用while循環的第一次迭代。 – deanosaur
@MarshallTigerus字符串數組goldWords是原文句子,分成單個單詞。問題是正確地結合它們。 – Saf