1

シノニムを保持するためのデータ構造を探しています。「Washington DC」、「Washington DC」、または「Washington DC」をすべて「Washington」に関連付けてください。List=>Value構造のようなもの。

ユーザーの都市が特定の Web サイトで言及されている場合にユーザーにメールを送信するサービスがあります。登録時に、電子メール アドレスと市区町村を入力します。ただし、「Washington」と入力する人もいれば、「Washington DC」と入力する人もいます。今、私はこれらを同じ「バケツ」に入れて、「ワシントン DC」または「ワシントン」が Web サイトで言及されている場合、これらすべての人々に電子メールを送信したいと考えています。

4

3 に答える 3

3
class Synonyms
  def initialize( *syns )
    @all = []
    @idx = {}
    syns.each{ |syn| self << syn }
  end
  def <<( syn )
    p syn
    unless @idx.include?(syn)
      @all << syn
      @idx[syn] = @all  
    end
  end
  def []( syn )
    @idx[syn]
  end
end

wash = Synonyms.new "Washington DC", "Washington", "Washington D.C."

p wash["Washington"]    #=> ["Washington DC", "Washington", "Washington D.C."]
p wash["Washington DC"] #=> ["Washington DC", "Washington", "Washington D.C."]
p wash["Nope"]          #=> nil

次に、既知の各シノニムをそのリストにマッピングするハッシュを作成するか、それらをループします。

于 2013-04-24T05:08:30.583 に答える
2

リストのハッシュを使用することをお勧めします。

例えば:

synonyms = {"Washington" => ["Washington D.C.", "Washington DC", "Washington D.C"], ...}

次に、ハッシュテーブルのルックアップ時間が短いという利点が得られ、アイテムを反復処理してリスト操作を実行できます。

アップデート

あなたが望むのはまだハッシュのようです。ただし、必要なことは、同義語のリストの特定のメンバーを他のすべての同義語のリストに関連付けることです。

これを行うための単純な関数を作成できます。たとえば、次のようになります。

def associate_synonyms(synonyms, syn_hash)
  synonyms.length.times do

    synonym = synonyms.pop

    p synonyms

    syn_hash[synonym] = synonyms.collect {|x| x}
    synonyms.insert(0, synonym)
  end
end

したがって、使用例:

place = ["Washington", "Washington D.C.", "Washington DC", "Washington D.C"]
synonym_lookup = {}

associate_synonyms(place, synonym_lookup)
于 2013-04-24T04:57:24.333 に答える
1

明確なニーズに基づいて、最も単純な解決策はおそらく単純なハッシュであり、考えられる各同義語は単純に正規の都市名を指します。

city_name_map = {"Washington D.C." => "Washington",
                 "Washington DC"   => "Washington",
                 "Washington D.C"  => "Washington",
                 "Washington"      => "Washington",
                 # and so forth
                }

ユーザーが にサインアップすると"Washington D.C."、データベース内の都市設定が の値city_name_map["Washington D.C."]、つまりとして保存されます"Washington"。同様に、ページで都市に関する言及を検索する場合は、地図で都市の正規名を確認してください。Web サイトで が言及されている場合は"Washington DC"、それを調べて を取得し"Washington"、正規の都市設定が一致する人に連絡します。

于 2013-04-24T05:17:39.830 に答える