2016-09-14 2 views
0

Für jeden Artikel gibt es eine Liste von Keywords, die derzeit markiert sind (umspannend mit der Klasse). Allerdings muss ich bestimmte Präpositionen innerhalb des Schlüsselwortes berücksichtigen ("at", "in", "on"). Jeder Artikel gehört zu einer Bestellung, die die Schlüsselwörter als durch Komma getrennte Zeichenfolge enthält.Hervorhebung Schlüsselwörter in String, erlaubt "at", "in", "on"

Zum Beispiel, wenn ich ein Long-Tail-Keyword wie "Boutique Hotels London" und der Artikel enthält die Worte "Boutique-Hotels in London" muss ich das als ein Stichwort hervorheben.

class Article < ActiveRecord::Base 
    def format_content 
    words = self.content 

    # map comma separated keywords into array and remove any whitespace 
    keywords = self.order.keywords.downcase.split(',').map{ |k| k.strip } 

    # replace words with keywords wrapped in span 
    keywords.each do |word| 
     words = words.gsub(/(#{word})/i, "<span class=\"text-primary\">\\1</span>") 
    end 

    words 
    end 
end 

Die format_content Verfahren wird in einem teilweise aus der Show Ansicht nach ein Artikel verwendet, so erstellt wird, wie: verketteten

<%= simple_format article.format_content, { class: "content" }, wrapper_tag: "p" %> 

Antwort

0

Wäre es genug sein, um nur eine Liste von Schlüsselwörtern mit Präpositionen zu erstellen?

keywords_with_prepositions = prepositions.flat_map do |preposition| 
    keywords.map do |keyword| 
    [keyword, "#{keyword} #{preposition}", "#{preposition} #{keyword}", "something other in combinatation with your #{keyword}"] 
    end 
end 

Mein Vorschlag ist, das aus dem Modell und in einen Dekorateur oder Helfer zu bewegen. Auch die require in der Methode sollte einige Ebenen nach oben verschoben werden.

+0

Dies würde Pre/Post-Wörter fangen, aber nicht diejenigen zwischen den Long Tail-Keywords. Muss für "Boutique-Hotel * in * London" arbeiten, während das Stichwort "Boutique-Hotel London" –

+0

lautet, also sollte es nur für Präpositionen zwischen Keywords funktionieren? –

+0

Ja für diejenigen, die zwischen Stichwörtern liegen (ein 'Schlüsselwort' kann in diesem Fall mehrere Wörter lang sein), aber auch für direkte Übereinstimmungen, wenn keine Präposition erforderlich ist. –

Verwandte Themen