Hiroyuki Komatsu
komat****@users*****
2004年 12月 20日 (月) 20:59:27 JST
Index: prime/lib/prime2.rb diff -u prime/lib/prime2.rb:1.1.2.5 prime/lib/prime2.rb:1.1.2.6 --- prime/lib/prime2.rb:1.1.2.5 Mon Dec 20 17:45:37 2004 +++ prime/lib/prime2.rb Mon Dec 20 20:59:26 2004 @@ -1,5 +1,5 @@ # prime2.rb: Module for PRIME2 protocol. -# $Id: prime2.rb,v 1.1.2.5 2004/12/20 08:45:37 komatsu Exp $ +# $Id: prime2.rb,v 1.1.2.6 2004/12/20 11:59:26 komatsu Exp $ # # Copyright (C) 2004 Hiroyuki Komatsu <komat****@taiya*****> # All rights reserved. @@ -149,9 +149,9 @@ ## FIXME: Shrink verbose candidates. ## FIXME: (2004-12-19) <Hiro> - conversions = PrimeConversionList.new( conversions_compact | - conversions_japanese | - conversions_overall ) + conversions = PrimeConversionList::merge( conversions_compact, + conversions_japanese, + conversions_overall ) end session_set_conversions(session, conversions) @@ -483,14 +483,15 @@ def segment_reconvert (segment, context = nil) reading = segment.reading - words1 = search_raw(reading) - words2 = search_overall(reading) - words3 = search_japanese_uniclause(reading) - words = PrimeWordList::merge(words1, words2, words3) + words1 = search_raw(reading) + words2 = search_overall(reading) + words3 = search_japanese_uniclause(reading) +# words = PrimeWordList::merge_by_literal(context, words1, words2, words3) candidates = segment.get_candidates() candidate_index = segment.get_candidate_index() - segment.set_candidates( ( candidates | words ), candidate_index ) + candidates = PrimeWordList::merge2([candidates], [words1, words2, words3]) + segment.set_candidates( candidates, candidate_index ) end def convert_japanese_process_segments_list (composer, threshold = 4) @@ -649,6 +650,32 @@ }.map { | conversion | conversion.to_text_debug() } return texts.join("\n") end + + def PrimeConversionList::merge (*conversions_list) + uniq_conversions = {} + conversions_list.each { | conversions | + if conversions.empty? then + next + end + + conversions.each { | conversion | + literal = conversion.get_literal() + unless uniq_conversions.has_key?( literal ) then + uniq_conversions[literal] = conversion + next + end + + if conversion.score > uniq_conversions[literal].score then + uniq_conversions[literal] = conversion + end + } + } + + conversions = uniq_conversions.values.sort { | conversion1, conversion2 | + conversion2.score <=> conversion1.score + } + return PrimeConversionList.new(conversions) + end end class PrimeConversion Index: prime/lib/prime.rb diff -u prime/lib/prime.rb:1.7.4.12 prime/lib/prime.rb:1.7.4.13 --- prime/lib/prime.rb:1.7.4.12 Mon Dec 20 00:03:48 2004 +++ prime/lib/prime.rb Mon Dec 20 20:59:26 2004 @@ -1,5 +1,5 @@ # prime/prime.rb -# $Id: prime.rb,v 1.7.4.12 2004/12/19 15:03:48 komatsu Exp $ +# $Id: prime.rb,v 1.7.4.13 2004/12/20 11:59:26 komatsu Exp $ # # Copyright (C) 2002, 2003, 2004 Hiroyuki Komatsu <komat****@taiya*****> # All rights reserved. @@ -499,6 +499,19 @@ return result end + def PrimeWordList::merge2 (words1, words2) + words1 = PrimeWordList::merge_by_literal(nil, *words1) + words2 = PrimeWordList::merge_by_literal(nil, *words2) + upper_words = words1.map { | word | word.to_text_literal() } + + words2.each { | word | + unless upper_words.member?( word.to_text_literal() ) then + words1.push( word ) + end + } + return words1 + end + def PrimeWordList::merge (*words) return PrimeWordList::merge_internal(:index, nil, words) end