[Prime-cvs] CVS update: prime/lib

Back to archive index

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


Prime-cvs メーリングリストの案内
Back to archive index