Created
July 25, 2011 17:47
-
-
Save ahoward/1104689 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# to use this limited full-text search facility in your mongo models just do | |
# | |
# class Page | |
# | |
# include Search::Mixin | |
# | |
# search :fields => %w( title description ) | |
# | |
# after_save do |doc| | |
# Search.index! doc | |
# end | |
# | |
# end | |
# | |
# Page.search('a word', 'or even many words to search for') | |
# | |
# you can rebuild the entire index at any point using | |
# | |
# Search.index! | |
# | |
# | |
### file: app/models/search | |
class Search | |
include Mongoid::Document | |
## config support | |
# | |
SearchConfig = Map[ | |
:fields, %w( title description name slug content body ) | |
] | |
def Search.search_config | |
SearchConfig | |
end | |
## | |
# | |
module Mixin | |
ClassMethods = proc do | |
def search(*args, &block) | |
options = args.extract_options!.to_options! | |
if args.empty? and !options.empty? | |
search_config.update(options) | |
else | |
model = self | |
args.unshift(model) unless args.include?(model) | |
searches = Search.search(*args, &block) | |
ids = searches.map{|search| search.context_id} | |
where(:_id.in => ids) | |
end | |
end | |
def search_config | |
@search_config ||= Search::SearchConfig.dup | |
end | |
end | |
def Mixin.included(other) | |
super | |
ensure | |
other.send(:instance_eval, &ClassMethods) | |
end | |
end | |
## | |
# | |
belongs_to(:context, :polymorphic => true) | |
field(:keywords, :type => Array, :default => []) | |
## | |
# | |
validates_uniqueness_of(:context_id, :scope => :context_type) | |
## | |
# | |
index(:context_type) | |
index([:context_type, :context_id].map{|key| [key, Mongo::ASCENDING]}, :unique => true) | |
index(:keywords) | |
def Search.index!(*args) | |
## | |
# | |
options = args.extract_options!.to_options! | |
documents = args | |
documents.flatten! | |
documents.compact! | |
## | |
# | |
if documents.blank? | |
all.each{|search| search.index!} | |
return | |
end | |
## | |
# | |
returned = [] | |
documents.each do |document| | |
## | |
# | |
document = document.context if document.is_a?(Search) | |
## | |
# | |
query = { | |
:context_type => document.class.name, | |
:context_id => document.id | |
} | |
attributes = { | |
} | |
## | |
# | |
keywords = [] | |
fields = Array(search_config[:fields]).flatten.compact | |
fields.each do |field| | |
value = document.respond_to?(field) ? document.send(field) : document[field] | |
keywords.push(value) unless value.blank? | |
end | |
keywords = Keywords.for(keywords) | |
attributes[:keywords] = keywords | |
## | |
# | |
search = nil | |
error = nil | |
conditions = query.dup.update(attributes) | |
2.times do |i| | |
search = where(query).first | |
unless search.blank? | |
search.update_attributes!(attributes) | |
search.reload | |
break | |
else | |
begin | |
search = create!(conditions) | |
rescue => e | |
error = e | |
nil | |
end | |
end | |
end | |
raise(error || "could not index #{ conditions.inspect }") unless search | |
returned.push(search) | |
end | |
returned | |
end | |
def index! | |
Search.index!(context) | |
end | |
def Search.search(*args) | |
options = args.extract_options!.to_options! | |
models = [options[:model], args.select{|arg| arg.is_a?(Class)}].flatten.compact | |
models.each{|model| args.delete(model)} unless models.blank? | |
keywords = [options[:keywords], args].flatten.compact | |
keywords = Keywords.for(keywords) | |
query = { | |
:keywords.all => keywords | |
} | |
unless models.blank? | |
context_types = models.map{|model| model.is_a?(Class) ? model.name : model.to_s} | |
query.update(:context_type.in => context_types) | |
end | |
where(query) | |
end | |
end | |
### file: lib/keywords.rb | |
begin | |
require 'rubygems' unless defined?(Gem) | |
rescue LoadError | |
nil | |
end | |
begin | |
require 'fast_stemmer' | |
rescue LoadError | |
begin | |
require 'stemmer' | |
rescue LoadError | |
abort("keywords.rb requires either the 'fast-stemmer' or 'ruby-stemmer' gems") | |
end | |
end | |
module Keywords | |
def extract(*args) | |
string = args.join(' ') | |
words = string.scan(/[\w._-]+/) | |
keywords = [] | |
words.each do |word| | |
word = word.downcase | |
stem = word.stem.downcase | |
next if Stopwords.stopword?(word) | |
next if Stopwords.stopword?(stem) | |
keywords.push(stem) | |
end | |
keywords | |
end | |
alias_method('for', 'extract') | |
module Stopwords | |
NULL = '' | |
ENGLISH_STOP_WORDS = [ | |
"a", "an", "and", "are", "as", "at", "be", "but", "by", "for", "if", "in", | |
"into", "is", "it", "no", "not", "of", "on", "or", "such", "that", | |
"the", "their", "then", "there", "these", "they", "this", "to", "was", | |
"with" | |
] | |
FULL_ENGLISH_STOP_WORDS = [ | |
"a", "about", "above", "after", "again", "against", "all", "am", "an", | |
"and", "any", "are", "aren't", "as", "at", "be", "because", "been", | |
"before", "being", "below", "between", "both", "but", "by", "cannot", | |
"can't", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", | |
"doing", "don't", "down", "during", "each", "few", "for", "from", | |
"further", | |
"had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", | |
"he'd", | |
"he'll", "her", "here", "here's", "hers", "herself", "he's", "him", | |
"himself", "his", "how", "how's", "i", "i'd", "if", "i'll", "i'm", "in", | |
"into", "is", "isn't", "it", "its", "it's", "itself", "i've", "let's", | |
"me", | |
"more", "most", "mustn't", "my", "myself", "no", "nor", "not", "of", | |
"off", | |
"on", "once", "only", "or", "other", "ought", "our", "ours", "ourselves", | |
"out", "over", "own", "same", "shan't", "she", "she'd", "she'll", "she's", | |
"should", "shouldn't", "so", "some", "such", "than", "that", "that's", | |
"the", "their", "theirs", "them", "themselves", "then", "there", | |
"there's", | |
"these", "they", "they'd", "they'll", "they're", "they've", "this", | |
"those", | |
"through", "to", "too", "under", "until", "up", "very", "was", "wasn't", | |
"we", "we'd", "we'll", "were", "we're", "weren't", "we've", "what", | |
"what's", "when", "when's", "where", "where's", "which", "while", "who", | |
"whom", "who's", "why", "why's", "with", "won't", "would", "wouldn't", | |
"you", "you'd", "you'll", "your", "you're", "yours", "yourself", | |
"yourselves", "you've" | |
] | |
EXTENDED_ENGLISH_STOP_WORDS = [ | |
"a", "about", "above", "after", "again", "against", "all", "am", "an", | |
"and", "any", "are", "aren't", "as", "at", "be", "because", "been", | |
"before", "being", "below", "between", "both", "but", "by", "cannot", | |
"can't", "could", "couldn't", "did", "didn't", "do", "does", "doesn't", | |
"doing", "don't", "down", "during", "each", "few", "for", "from", | |
"further", | |
"had", "hadn't", "has", "hasn't", "have", "haven't", "having", "he", | |
"he'd", | |
"he'll", "her", "here", "here's", "hers", "herself", "he's", "him", | |
"himself", "his", "how", "how's", "i", "i'd", "if", "i'll", "i'm", "in", | |
"into", "is", "isn't", "it", "its", "it's", "itself", "i've", "let's", | |
"me", | |
"more", "most", "mustn't", "my", "myself", "no", "nor", "not", "of", | |
"off", | |
"on", "once", "only", "or", "other", "ought", "our", "ours", "ourselves", | |
"out", "over", "own", "same", "shan't", "she", "she'd", "she'll", "she's", | |
"should", "shouldn't", "so", "some", "such", "than", "that", "that's", | |
"the", "their", "theirs", "them", "themselves", "then", "there", | |
"there's", | |
"these", "they", "they'd", "they'll", "they're", "they've", "this", | |
"those", | |
"through", "to", "too", "under", "until", "up", "very", "was", "wasn't", | |
"we", "we'd", "we'll", "were", "we're", "weren't", "we've", "what", | |
"what's", "when", "when's", "where", "where's", "which", "while", "who", | |
"whom", "who's", "why", "why's", "with", "won't", "would", "wouldn't", | |
"you", "you'd", "you'll", "your", "you're", "yours", "yourself", | |
"yourselves", "you've", | |
"one", "every", "least", "less", "many", "now", "ever", "never", "say", | |
"says", "said", "also", "get", "go", "goes", "just", "made", "make", | |
"put", | |
"see", "seen", "whether", "like", "well", "back", "even", "still", "way", | |
"take", "since", "another", "however", "two", "three", "four", "five", | |
"first", "second", "new", "old", "high", "long" | |
] | |
FULL_FRENCH_STOP_WORDS = [ | |
"au", "aux", "avec", "ce", "ces", "dans", "de", "des", "du", "elle", "en", | |
"et", "eux", "il", "je", "la", "le", "leur", "lui", "ma", "mais", "me", | |
"même", "mes", "moi", "mon", "ne", "nos", "notre", "nous", "on", "ou", | |
"par", "pas", "pour", "qu", "que", "qui", "sa", "se", "ses", "son", "sur", | |
"ta", "te", "tes", "toi", "ton", "tu", "un", "une", "vos", "votre", | |
"vous", | |
"c", "d", "j", "l", "à", "m", "n", "s", "t", "y", "été", "étée", | |
"étées", | |
"étés", "étant", "étante", "étants", "étantes", "suis", "es", "est", | |
"sommes", "êtes", "sont", "serai", "seras", "sera", "serons", "serez", | |
"seront", "serais", "serait", "serions", "seriez", "seraient", "étais", | |
"était", "étions", "étiez", "étaient", "fus", "fut", "fûmes", | |
"fûtes", | |
"furent", "sois", "soit", "soyons", "soyez", "soient", "fusse", "fusses", | |
"fût", "fussions", "fussiez", "fussent", "ayant", "ayante", "ayantes", | |
"ayants", "eu", "eue", "eues", "eus", "ai", "as", "avons", "avez", "ont", | |
"aurai", "auras", "aura", "aurons", "aurez", "auront", "aurais", "aurait", | |
"aurions", "auriez", "auraient", "avais", "avait", "avions", "aviez", | |
"avaient", "eut", "eûmes", "eûtes", "eurent", "aie", "aies", "ait", | |
"ayons", | |
"ayez", "aient", "eusse", "eusses", "eût", "eussions", "eussiez", | |
"eussent" | |
] | |
FULL_SPANISH_STOP_WORDS = [ | |
"de", "la", "que", "el", "en", "y", "a", "los", "del", "se", "las", "por", | |
"un", "para", "con", "no", "una", "su", "al", "lo", "como", "más", | |
"pero", | |
"sus", "le", "ya", "o", "este", "sí", "porque", "esta", "entre", | |
"cuando", | |
"muy", "sin", "sobre", "también", "me", "hasta", "hay", "donde", "quien", | |
"desde", "todo", "nos", "durante", "todos", "uno", "les", "ni", "contra", | |
"otros", "ese", "eso", "ante", "ellos", "e", "esto", "mí", "antes", | |
"algunos", "qué", "unos", "yo", "otro", "otras", "otra", "él", "tanto", | |
"esa", "estos", "mucho", "quienes", "nada", "muchos", "cual", "poco", | |
"ella", "estar", "estas", "algunas", "algo", "nosotros", "mi", "mis", | |
"tú", | |
"te", "ti", "tu", "tus", "ellas", "nosotras", "vosostros", "vosostras", | |
"os", "mío", "mía", "míos", "mías", "tuyo", "tuya", "tuyos", "tuyas", | |
"suyo", "suya", "suyos", "suyas", "nuestro", "nuestra", "nuestros", | |
"nuestras", "vuestro", "vuestra", "vuestros", "vuestras", "esos", "esas", | |
"estoy", "estás", "está", "estamos", "estáis", "están", "esté", | |
"estés", | |
"estemos", "estéis", "estén", "estaré", "estarás", "estará", | |
"estaremos", | |
"estaréis", "estarán", "estaría", "estarías", "estaríamos", | |
"estaríais", | |
"estarían", "estaba", "estabas", "estábamos", "estabais", "estaban", | |
"estuve", "estuviste", "estuvo", "estuvimos", "estuvisteis", "estuvieron", | |
"estuviera", "estuvieras", "estuviéramos", "estuvierais", "estuvieran", | |
"estuviese", "estuvieses", "estuviésemos", "estuvieseis", "estuviesen", | |
"estando", "estado", "estada", "estados", "estadas", "estad", "he", "has", | |
"ha", "hemos", "habéis", "han", "haya", "hayas", "hayamos", "hayáis", | |
"hayan", "habré", "habrás", "habrá", "habremos", "habréis", "habrán", | |
"habría", "habrías", "habríamos", "habríais", "habrían", "había", | |
"habías", | |
"habíamos", "habíais", "habían", "hube", "hubiste", "hubo", "hubimos", | |
"hubisteis", "hubieron", "hubiera", "hubieras", "hubiéramos", | |
"hubierais", | |
"hubieran", "hubiese", "hubieses", "hubiésemos", "hubieseis", "hubiesen", | |
"habiendo", "habido", "habida", "habidos", "habidas", "soy", "eres", "es", | |
"somos", "sois", "son", "sea", "seas", "seamos", "seáis", "sean", | |
"seré", | |
"serás", "será", "seremos", "seréis", "serán", "sería", "serías", | |
"seríamos", "seríais", "serían", "era", "eras", "éramos", "erais", | |
"eran", | |
"fui", "fuiste", "fue", "fuimos", "fuisteis", "fueron", "fuera", "fueras", | |
"fuéramos", "fuerais", "fueran", "fuese", "fueses", "fuésemos", | |
"fueseis", | |
"fuesen", "sintiendo", "sentido", "sentida", "sentidos", "sentidas", | |
"siente", "sentid", "tengo", "tienes", "tiene", "tenemos", "tenéis", | |
"tienen", "tenga", "tengas", "tengamos", "tengáis", "tengan", "tendré", | |
"tendrás", "tendrá", "tendremos", "tendréis", "tendrán", "tendría", | |
"tendrías", "tendríamos", "tendríais", "tendrían", "tenía", | |
"tenías", | |
"teníamos", "teníais", "tenían", "tuve", "tuviste", "tuvo", "tuvimos", | |
"tuvisteis", "tuvieron", "tuviera", "tuvieras", "tuviéramos", | |
"tuvierais", | |
"tuvieran", "tuviese", "tuvieses", "tuviésemos", "tuvieseis", "tuviesen", | |
"teniendo", "tenido", "tenida", "tenidos", "tenidas", "tened", NULL | |
] | |
FULL_PORTUGUESE_STOP_WORDS = [ | |
"de", "a", "o", "que", "e", "do", "da", "em", "um", "para", "com", "não", | |
"uma", "os", "no", "se", "na", "por", "mais", "as", "dos", "como", "mas", | |
"ao", "ele", "das", "à", "seu", "sua", "ou", "quando", "muito", "nos", | |
"já", | |
"eu", "também", "só", "pelo", "pela", "até", "isso", "ela", "entre", | |
"depois", "sem", "mesmo", "aos", "seus", "quem", "nas", "me", "esse", | |
"eles", "você", "essa", "num", "nem", "suas", "meu", "às", "minha", | |
"numa", | |
"pelos", "elas", "qual", "nós", "lhe", "deles", "essas", "esses", | |
"pelas", | |
"este", "dele", "tu", "te", "vocês", "vos", "lhes", "meus", "minhas", | |
"teu", | |
"tua", "teus", "tuas", "nosso", "nossa", "nossos", "nossas", "dela", | |
"delas", "esta", "estes", "estas", "aquele", "aquela", "aqueles", | |
"aquelas", | |
"isto", "aquilo", "estou", "está", "estamos", "estão", "estive", | |
"esteve", | |
"estivemos", "estiveram", "estava", "estávamos", "estavam", "estivera", | |
"estivéramos", "esteja", "estejamos", "estejam", "estivesse", | |
"estivéssemos", "estivessem", "estiver", "estivermos", "estiverem", | |
"hei", | |
"há", "havemos", "hão", "houve", "houvemos", "houveram", "houvera", | |
"houvéramos", "haja", "hajamos", "hajam", "houvesse", "houvéssemos", | |
"houvessem", "houver", "houvermos", "houverem", "houverei", "houverá", | |
"houveremos", "houverão", "houveria", "houveríamos", "houveriam", "sou", | |
"somos", "são", "era", "éramos", "eram", "fui", "foi", "fomos", "foram", | |
"fora", "fôramos", "seja", "sejamos", "sejam", "fosse", "fôssemos", | |
"fossem", "for", "formos", "forem", "serei", "será", "seremos", "serão", | |
"seria", "seríamos", "seriam", "tenho", "tem", "temos", "tém", "tinha", | |
"tínhamos", "tinham", "tive", "teve", "tivemos", "tiveram", "tivera", | |
"tivéramos", "tenha", "tenhamos", "tenham", "tivesse", "tivéssemos", | |
"tivessem", "tiver", "tivermos", "tiverem", "terei", "terá", "teremos", | |
"terão", "teria", "teríamos", "teriam", NULL | |
] | |
FULL_ITALIAN_STOP_WORDS = [ | |
"ad", "al", "allo", "ai", "agli", "all", "agl", "alla", "alle", "con", | |
"col", "coi", "da", "dal", "dallo", "dai", "dagli", "dall", "dagl", | |
"dalla", | |
"dalle", "di", "del", "dello", "dei", "degli", "dell", "degl", "della", | |
"delle", "in", "nel", "nello", "nei", "negli", "nell", "negl", "nella", | |
"nelle", "su", "sul", "sullo", "sui", "sugli", "sull", "sugl", "sulla", | |
"sulle", "per", "tra", "contro", "io", "tu", "lui", "lei", "noi", "voi", | |
"loro", "mio", "mia", "miei", "mie", "tuo", "tua", "tuoi", "tue", "suo", | |
"sua", "suoi", "sue", "nostro", "nostra", "nostri", "nostre", "vostro", | |
"vostra", "vostri", "vostre", "mi", "ti", "ci", "vi", "lo", "la", "li", | |
"le", "gli", "ne", "il", "un", "uno", "una", "ma", "ed", "se", "perché", | |
"anche", "come", "dov", "dove", "che", "chi", "cui", "non", "più", | |
"quale", | |
"quanto", "quanti", "quanta", "quante", "quello", "quelli", "quella", | |
"quelle", "questo", "questi", "questa", "queste", "si", "tutto", "tutti", | |
"a", "c", "e", "i", "l", "o", "ho", "hai", "ha", "abbiamo", "avete", | |
"hanno", "abbia", "abbiate", "abbiano", "avrò", "avrai", "avrà", | |
"avremo", | |
"avrete", "avranno", "avrei", "avresti", "avrebbe", "avremmo", "avreste", | |
"avrebbero", "avevo", "avevi", "aveva", "avevamo", "avevate", "avevano", | |
"ebbi", "avesti", "ebbe", "avemmo", "aveste", "ebbero", "avessi", | |
"avesse", | |
"avessimo", "avessero", "avendo", "avuto", "avuta", "avuti", "avute", | |
"sono", "sei", "è", "siamo", "siete", "sia", "siate", "siano", "sarò", | |
"sarai", "sarà", "saremo", "sarete", "saranno", "sarei", "saresti", | |
"sarebbe", "saremmo", "sareste", "sarebbero", "ero", "eri", "era", | |
"eravamo", "eravate", "erano", "fui", "fosti", "fu", "fummo", "foste", | |
"furono", "fossi", "fosse", "fossimo", "fossero", "essendo", "faccio", | |
"fai", "facciamo", "fanno", "faccia", "facciate", "facciano", "farò", | |
"farai", "farà", "faremo", "farete", "faranno", "farei", "faresti", | |
"farebbe", "faremmo", "fareste", "farebbero", "facevo", "facevi", | |
"faceva", | |
"facevamo", "facevate", "facevano", "feci", "facesti", "fece", "facemmo", | |
"faceste", "fecero", "facessi", "facesse", "facessimo", "facessero", | |
"facendo", "sto", "stai", "sta", "stiamo", "stanno", "stia", "stiate", | |
"stiano", "starò", "starai", "starà", "staremo", "starete", "staranno", | |
"starei", "staresti", "starebbe", "staremmo", "stareste", "starebbero", | |
"stavo", "stavi", "stava", "stavamo", "stavate", "stavano", "stetti", | |
"stesti", "stette", "stemmo", "steste", "stettero", "stessi", "stesse", | |
"stessimo", "stessero", "stando", NULL | |
] | |
FULL_GERMAN_STOP_WORDS = [ | |
"aber", "alle", "allem", "allen", "aller", "alles", "als", "also", "am", | |
"an", "ander", "andere", "anderem", "anderen", "anderer", "anderes", | |
"anderm", "andern", "anderr", "anders", "auch", "auf", "aus", "bei", | |
"bin", | |
"bis", "bist", "da", "damit", "dann", "der", "den", "des", "dem", "die", | |
"das", "daß", "derselbe", "derselben", "denselben", "desselben", | |
"demselben", "dieselbe", "dieselben", "dasselbe", "dazu", "dein", "deine", | |
"deinem", "deinen", "deiner", "deines", "denn", "derer", "dessen", "dich", | |
"dir", "du", "dies", "diese", "diesem", "diesen", "dieser", "dieses", | |
"doch", "dort", "durch", "ein", "eine", "einem", "einen", "einer", | |
"eines", | |
"einig", "einige", "einigem", "einigen", "einiger", "einiges", "einmal", | |
"er", "ihn", "ihm", "es", "etwas", "euer", "eure", "eurem", "euren", | |
"eurer", "eures", "für", "gegen", "gewesen", "hab", "habe", "haben", | |
"hat", | |
"hatte", "hatten", "hier", "hin", "hinter", "ich", "mich", "mir", "ihr", | |
"ihre", "ihrem", "ihren", "ihrer", "ihres", "euch", "im", "in", "indem", | |
"ins", "ist", "jede", "jedem", "jeden", "jeder", "jedes", "jene", "jenem", | |
"jenen", "jener", "jenes", "jetzt", "kann", "kein", "keine", "keinem", | |
"keinen", "keiner", "keines", "können", "könnte", "machen", "man", | |
"manche", | |
"manchem", "manchen", "mancher", "manches", "mein", "meine", "meinem", | |
"meinen", "meiner", "meines", "mit", "muss", "musste", "nach", "nicht", | |
"nichts", "noch", "nun", "nur", "ob", "oder", "ohne", "sehr", "sein", | |
"seine", "seinem", "seinen", "seiner", "seines", "selbst", "sich", "sie", | |
"ihnen", "sind", "so", "solche", "solchem", "solchen", "solcher", | |
"solches", | |
"soll", "sollte", "sondern", "sonst", "über", "um", "und", "uns", "unse", | |
"unsem", "unsen", "unser", "unses", "unter", "viel", "vom", "von", "vor", | |
"während", "war", "waren", "warst", "was", "weg", "weil", "weiter", | |
"welche", "welchem", "welchen", "welcher", "welches", "wenn", "werde", | |
"werden", "wie", "wieder", "will", "wir", "wird", "wirst", "wo", "wollen", | |
"wollte", "würde", "würden", "zu", "zum", "zur", "zwar", "zwischen", | |
NULL | |
] | |
FULL_DUTCH_STOP_WORDS = [ | |
"de", "en", "van", "ik", "te", "dat", "die", "in", "een", "hij", "het", | |
"niet", "zijn", "is", "was", "op", "aan", "met", "als", "voor", "had", | |
"er", | |
"maar", "om", "hem", "dan", "zou", "of", "wat", "mijn", "men", "dit", | |
"zo", | |
"door", "over", "ze", "zich", "bij", "ook", "tot", "je", "mij", "uit", | |
"der", "daar", "haar", "naar", "heb", "hoe", "heeft", "hebben", "deze", | |
"u", | |
"want", "nog", "zal", "me", "zij", "nu", "ge", "geen", "omdat", "iets", | |
"worden", "toch", "al", "waren", "veel", "meer", "doen", "toen", "moet", | |
"ben", "zonder", "kan", "hun", "dus", "alles", "onder", "ja", "eens", | |
"hier", "wie", "werd", "altijd", "doch", "wordt", "wezen", "kunnen", | |
"ons", | |
"zelf", "tegen", "na", "reeds", "wil", "kon", "niets", "uw", "iemand", | |
"geweest", "andere", NULL | |
] | |
FULL_SWEDISH_STOP_WORDS = [ | |
"och", "det", "att", "i", "en", "jag", "hon", "som", "han", "på", "den", | |
"med", "var", "sig", "för", "så", "till", "är", "men", "ett", "om", | |
"hade", | |
"de", "av", "icke", "mig", "du", "henne", "då", "sin", "nu", "har", | |
"inte", | |
"hans", "honom", "skulle", "hennes", "där", "min", "man", "ej", "vid", | |
"kunde", "något", "från", "ut", "när", "efter", "upp", "vi", "dem", | |
"vara", | |
"vad", "över", "än", "dig", "kan", "sina", "här", "ha", "mot", "alla", | |
"under", "någon", "eller", "allt", "mycket", "sedan", "ju", "denna", | |
"själv", "detta", "åt", "utan", "varit", "hur", "ingen", "mitt", "ni", | |
"bli", "blev", "oss", "din", "dessa", "några", "deras", "blir", "mina", | |
"samma", "vilken", "er", "sådan", "vår", "blivit", "dess", "inom", | |
"mellan", | |
"sådant", "varför", "varje", "vilka", "ditt", "vem", "vilket", "sitta", | |
"sådana", "vart", "dina", "vars", "vårt", "våra", "ert", "era", | |
"vilkas", | |
NULL | |
] | |
FULL_NORWEGIAN_STOP_WORDS = [ | |
"og", "i", "jeg", "det", "at", "en", "et", "den", "til", "er", "som", | |
"på", | |
"de", "med", "han", "av", "ikke", "ikkje", "der", "så", "var", "meg", | |
"seg", | |
"men", "ett", "har", "om", "vi", "min", "mitt", "ha", "hadde", "hun", | |
"nå", | |
"over", "da", "ved", "fra", "du", "ut", "sin", "dem", "oss", "opp", "man", | |
"kan", "hans", "hvor", "eller", "hva", "skal", "selv", "sjøl", "her", | |
"alle", "vil", "bli", "ble", "blei", "blitt", "kunne", "inn", "når", | |
"være", | |
"kom", "noen", "noe", "ville", "dere", "som", "deres", "kun", "ja", | |
"etter", | |
"ned", "skulle", "denne", "for", "deg", "si", "sine", "sitt", "mot", "å", | |
"meget", "hvorfor", "dette", "disse", "uten", "hvordan", "ingen", "din", | |
"ditt", "blir", "samme", "hvilken", "hvilke", "sånn", "inni", "mellom", | |
"vår", "hver", "hvem", "vors", "hvis", "både", "bare", "enn", "fordi", | |
"før", "mange", "også", "slik", "vært", "være", "båe", "begge", | |
"siden", | |
"dykk", "dykkar", "dei", "deira", "deires", "deim", "di", "då", "eg", | |
"ein", | |
"eit", "eitt", "elles", "honom", "hjå", "ho", "hoe", "henne", "hennar", | |
"hennes", "hoss", "hossen", "ikkje", "ingi", "inkje", "korleis", "korso", | |
"kva", "kvar", "kvarhelst", "kven", "kvi", "kvifor", "me", "medan", "mi", | |
"mine", "mykje", "no", "nokon", "noka", "nokor", "noko", "nokre", "si", | |
"sia", "sidan", "so", "somt", "somme", "um", "upp", "vere", "vore", | |
"verte", | |
"vort", "varte", "vart", NULL | |
] | |
FULL_DANISH_STOP_WORDS = [ | |
"og", "i", "jeg", "det", "at", "en", "den", "til", "er", "som", "på", | |
"de", | |
"med", "han", "af", "for", "ikke", "der", "var", "mig", "sig", "men", | |
"et", | |
"har", "om", "vi", "min", "havde", "ham", "hun", "nu", "over", "da", | |
"fra", | |
"du", "ud", "sin", "dem", "os", "op", "man", "hans", "hvor", "eller", | |
"hvad", "skal", "selv", "her", "alle", "vil", "blev", "kunne", "ind", | |
"når", | |
"være", "dog", "noget", "ville", "jo", "deres", "efter", "ned", "skulle", | |
"denne", "end", "dette", "mit", "også", "under", "have", "dig", "anden", | |
"hende", "mine", "alt", "meget", "sit", "sine", "vor", "mod", "disse", | |
"hvis", "din", "nogle", "hos", "blive", "mange", "ad", "bliver", "hendes", | |
"været", "thi", "jer", "sådan", NULL | |
] | |
FULL_RUSSIAN_STOP_WORDS = [ | |
"а", "без", "более", "бы", "был", "была", "были", "было", "быть", "в", | |
"вам", "вас", "весь", "во", "вот", "все", "всего", "всех", "вы", "где", | |
"да", "даже", "для", "до", "его", "ее", "ей", "ею", "если", "есть", "еще", | |
"же", "за", "здесь", "и", "из", "или", "им", "их", "к", "как", "ко", | |
"когда", "кто", "ли", "либо", "мне", "может", "мы", "на", "надо", "наш", | |
"не", "него", "нее", "нет", "ни", "них", "но", "ну", "о", "об", "однако", | |
"он", "она", "они", "оно", "от", "очень", "по", "под", "при", "с", "со", | |
"так", "также", "такой", "там", "те", "тем", "то", "того", "тоже", "той", | |
"только", "том", "ты", "у", "уже", "хотя", "чего", "чей", "чем", "что", | |
"чтобы", "чье", "чья", "эта", "эти", "это", "я", NULL | |
] | |
FULL_RUSSIAN_STOP_WORDS_KOI8_R = [ | |
"Á", "ÂÅÚ", "ÂÏÌÅÅ", "ÂÙ", "ÂÙÌ", "ÂÙÌÁ", "ÂÙÌÉ", "ÂÙÌÏ", "ÂÙÔØ", "×", | |
"×ÁÍ", "×ÁÓ", "×ÅÓØ", "×Ï", "×ÏÔ", "×ÓÅ", "×ÓÅÇÏ", "×ÓÅÈ", "×Ù", "ÇÄÅ", | |
"ÄÁ", "ÄÁÖÅ", "ÄÌÑ", "ÄÏ", "ÅÇÏ", "ÅÅ", "ÅÊ", "ÅÀ", "ÅÓÌÉ", "ÅÓÔØ", "ÅÝÅ", | |
"ÖÅ", "ÚÁ", "ÚÄÅÓØ", "É", "ÉÚ", "ÉÌÉ", "ÉÍ", "ÉÈ", "Ë", "ËÁË", "ËÏ", | |
"ËÏÇÄÁ", "ËÔÏ", "ÌÉ", "ÌÉÂÏ", "ÍÎÅ", "ÍÏÖÅÔ", "ÍÙ", "ÎÁ", "ÎÁÄÏ", "ÎÁÛ", | |
"ÎÅ", "ÎÅÇÏ", "ÎÅÅ", "ÎÅÔ", "ÎÉ", "ÎÉÈ", "ÎÏ", "ÎÕ", "Ï", "ÏÂ", "ÏÄÎÁËÏ", | |
"ÏÎ", "ÏÎÁ", "ÏÎÉ", "ÏÎÏ", "ÏÔ", "ÏÞÅÎØ", "ÐÏ", "ÐÏÄ", "ÐÒÉ", "Ó", "ÓÏ", | |
"ÔÁË", "ÔÁËÖÅ", "ÔÁËÏÊ", "ÔÁÍ", "ÔÅ", "ÔÅÍ", "ÔÏ", "ÔÏÇÏ", "ÔÏÖÅ", "ÔÏÊ", | |
"ÔÏÌØËÏ", "ÔÏÍ", "ÔÙ", "Õ", "ÕÖÅ", "ÈÏÔÑ", "ÞÅÇÏ", "ÞÅÊ", "ÞÅÍ", "ÞÔÏ", | |
"ÞÔÏÂÙ", "ÞØÅ", "ÞØÑ", "ÜÔÁ", "ÜÔÉ", "ÜÔÏ", "Ñ", NULL | |
] | |
FULL_FINNISH_STOP_WORDS = [ | |
NULL | |
] | |
All = ( | |
ENGLISH_STOP_WORDS + | |
FULL_ENGLISH_STOP_WORDS + | |
EXTENDED_ENGLISH_STOP_WORDS + | |
FULL_FRENCH_STOP_WORDS + | |
FULL_SPANISH_STOP_WORDS + | |
FULL_PORTUGUESE_STOP_WORDS + | |
FULL_ITALIAN_STOP_WORDS + | |
FULL_GERMAN_STOP_WORDS + | |
FULL_DUTCH_STOP_WORDS + | |
FULL_NORWEGIAN_STOP_WORDS + | |
FULL_DANISH_STOP_WORDS + | |
FULL_RUSSIAN_STOP_WORDS + | |
FULL_RUSSIAN_STOP_WORDS_KOI8_R + | |
FULL_FINNISH_STOP_WORDS | |
).sort.uniq | |
Index = {} | |
All.each do |word| | |
Index[word] = word | |
end | |
def stopword?(word) | |
!!Index[word] | |
end | |
extend(Stopwords) | |
end | |
extend(Keywords) | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment