2017-03-07 15 views
0

私はRailsアプリケーションを使ってニュースページからRSSフィードを取得し、品詞タグ付けをタイトルに適用し、タイトルから名詞句を取得し、それぞれが発生します。私は他の名詞句の一部である名詞句をフィルタリングする必要があり、そうするために、このコードを使用しています:Rubyのハッシュから重複した部分文字列をフィルタリングする

filtered_noun_phrases = sorted_noun_phrases.select{|a| 
    sorted_noun_phrases.keys.any?{|b| b != a and a.index(b) } }.to_h 

ので、この:

{"troops retake main government office"=>2, 
"retake main government office"=>2, "main government office"=>2} 

はちょうどになるべきしかし

{"troops retake main government office"=>2} 

、このような名詞句のソートされたハッシュ:

{"troops retake main government office"=>2, "chinese students fighting racism"=>2, 
"retake main government office"=>2, "mosul retake government base"=>2, 
"toddler killer shot dead"=>2, "students fighting racism"=>2, 
"retake government base"=>2, "main government office"=>2, 
"white house tourists"=>2, "horn at french zoo"=>2, "government office"=>2, 
"cia hacking tools"=>2, "killer shot dead"=>2, "government base"=>2, 
"boko haram teen"=>2, "horn chainsawed"=>2, "fighting racism"=>2, 
"silver surfers"=>2, "house tourists"=>2, "natural causes"=>2, 
"george michael"=>2, "instagram fame"=>2, "hacking tools"=>2, 
"iraqi forces"=>2, "mosul battle"=>2, "own wedding"=>2, "french zoo"=>2, 
"haram teen"=>2, "hacked tvs"=>2, "shot dead"=>2} 

は、代わりに部分的にしかフィルタ:

{"troops retake main government office"=>2, "chinese students fighting racism"=>2, 
"retake main government office"=>2, "mosul retake government base"=>2, 
"toddler killer shot dead"=>2, "students fighting racism"=>2, 
"retake government base"=>2, "main government office"=>2, 
"white house tourists"=>2, "horn at french zoo"=>2, 
"cia hacking tools"=>2, "killer shot dead"=>2, 
"boko haram teen"=>2} 

それでは、どのように私は実際に動作するハッシュのうち、重複した部分文字列をフィルタリングすることができますか?

+0

おそらくthis:filtered_noun_phrases = sorted_noun_phrases.reject {| a | sorted_noun_phrases.keys.any?{| b | b!= aとb.index(a)}} .to_h – trueunlessfalse

+0

ありがとうございます!後見ではダン質問のように思えますが、以前はそれを行い、長いフレーズを削除して部分文字列を残していました... –

+0

私は選択するだけでなく、a.index b)にb.index(a( – trueunlessfalse

答えて

0

あなたが現在やっていることはどんなフレーズがそのフレーズの部分文字列で存在するすべてのフレーズを選択しています。

「軍の再就任のための主要官庁」については、これは「復職本部」と同じです。

しかし、「再就職本庁」については、依然として「主官公庁」があり、除外していません。

例えばこう:

filtered_noun_phrases = sorted_noun_phrases.reject{|a| sorted_noun_phrases.keys.any?{|b| b != a and b.index(a) } }.to_h 

あなたは任意の文字列は、そのフレーズが含まれて存在するために、すべてのフレーズを拒否することができます。

+0

ありがとう、答えとして選択! –

0
filtered_noun_phrases = sorted_noun_phrases.reject{|a| sorted_noun_phrases.keys.any?{|b| b != a and b.index(a) } }.to_h 

- trueunlessfalse

+0

ああ、ありがとう!私はちょうど上記の説明の少しの答えを追加しました)乾杯。 – trueunlessfalse

関連する問題