pragmatic_tokenizer 2.1.0 → 2.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +77 -13
- data/README.md +3 -3
- data/lib/pragmatic_tokenizer/full_stop_separator.rb +2 -2
- data/lib/pragmatic_tokenizer/languages.rb +27 -26
- data/lib/pragmatic_tokenizer/languages/arabic.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/bulgarian.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/catalan.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/common.rb +11 -11
- data/lib/pragmatic_tokenizer/languages/czech.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/danish.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/deutsch.rb +4 -4
- data/lib/pragmatic_tokenizer/languages/dutch.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/english.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/finnish.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/french.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/greek.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/indonesian.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/italian.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/latvian.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/norwegian.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/persian.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/polish.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/portuguese.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/romanian.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/russian.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/slovak.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/spanish.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/swedish.rb +2 -2
- data/lib/pragmatic_tokenizer/languages/turkish.rb +2 -2
- data/lib/pragmatic_tokenizer/post_processor.rb +11 -13
- data/lib/pragmatic_tokenizer/tokenizer.rb +195 -187
- data/lib/pragmatic_tokenizer/version.rb +1 -1
- data/pragmatic_tokenizer.gemspec +1 -1
- data/spec/languages/bulgarian_spec.rb +4 -8
- data/spec/languages/deutsch_spec.rb +25 -49
- data/spec/languages/english_spec.rb +238 -364
- data/spec/languages/french_spec.rb +1 -2
- data/spec/performance_spec.rb +15 -16
- metadata +4 -4
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Norwegian
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = [].freeze
|
6
|
-
STOP_WORDS = %w(alle andre arbeid av bare begge bli bort bra bruk bruke da deg denne der deres det dette din disse du eller en ene eneste enhver enn er et folk for fordi forsûke fra få før fûr fûrst gjorde gjûre god gå ha hadde han hans har hennes her hun hva hvem hver hvilken hvis hvor hvordan hvorfor i ikke inn innen jeg kan kunne lage lang lik like makt mange med meg meget men mens mer mest min mot mye må måte navn nei noen ny nå når og også om opp oss over part punkt på rett riktig samme sant seg sett si siden sist skulle slik slutt som start stille så tid til tilbake tilstand under ut uten var ved verdi vi vil ville vite vår vöre vört å).freeze
|
5
|
+
ABBREVIATIONS = Set.new([]).freeze
|
6
|
+
STOP_WORDS = Set.new(%w(alle andre arbeid av bare begge bli bort bra bruk bruke da deg denne der deres det dette din disse du eller en ene eneste enhver enn er et folk for fordi forsûke fra få før fûr fûrst gjorde gjûre god gå ha hadde han hans har hennes her hun hva hvem hver hvilken hvis hvor hvordan hvorfor i ikke inn innen jeg kan kunne lage lang lik like makt mange med meg meget men mens mer mest min mot mye må måte navn nei noen ny nå når og også om opp oss over part punkt på rett riktig samme sant seg sett si siden sist skulle slik slutt som start stille så tid til tilbake tilstand under ut uten var ved verdi vi vil ville vite vår vöre vört å)).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Persian
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = [].freeze
|
6
|
-
STOP_WORDS = %w(و در به از كه مي اين است را با هاي براي آن يك شود شده خود ها كرد شد اي تا كند بر بود گفت نيز وي هم كنند دارد ما كرده يا اما بايد دو اند هر خواهد او مورد آنها باشد ديگر مردم نمي بين پيش پس اگر همه صورت يكي هستند بي من دهد هزار نيست استفاده داد داشته راه داشت چه همچنين كردند داده بوده دارند همين ميليون سوي شوند بيشتر بسيار روي گرفته هايي تواند اول نام هيچ چند جديد بيش شدن كردن كنيم نشان حتي اينكه ولی توسط چنين برخي نه ديروز دوم درباره بعد مختلف گيرد شما گفته آنان بار طور گرفت دهند گذاري بسياري طي بودند ميليارد بدون تمام كل تر براساس شدند ترين امروز باشند ندارد چون قابل گويد ديگري همان خواهند قبل آمده اكنون تحت طريق گيري جاي هنوز چرا البته كنيد سازي سوم كنم بلكه زير توانند ضمن فقط بودن حق آيد وقتي اش يابد نخستين مقابل خدمات امسال تاكنون مانند تازه آورد فكر آنچه نخست نشده شايد چهار جريان پنج ساخته زيرا نزديك برداري كسي ريزي رفت گردد مثل آمد ام بهترين دانست كمتر دادن تمامي جلوگيري بيشتري ايم ناشي چيزي آنكه بالا بنابراين ايشان بعضي دادند داشتند برخوردار نخواهد هنگام نبايد غير نبود ديده وگو داريم چگونه بندي خواست فوق ده نوعي هستيم ديگران همچنان سراسر ندارند گروهي سعي روزهاي آنجا يكديگر كردم بيست بروز سپس رفته آورده نمايد باشيم گويند زياد خويش همواره گذاشته شش نداشته شناسي خواهيم آباد داشتن نظير همچون باره نكرده شان سابق هفت دانند جايي بی جز زیرِ رویِ سریِ تویِ جلویِ پیشِ عقبِ بالایِ خارجِ وسطِ بیرونِ سویِ کنارِ پاعینِ نزدِ نزدیکِ دنبالِ حدودِ برابرِ طبقِ مانندِ ضدِّ هنگامِ برایِ مثلِ بارة اثرِ تولِ علّتِ سمتِ عنوانِ قصدِ روب جدا کی که چیست هست کجا کجاست کَی چطور کدام آیا مگر چندین یک چیزی دیگر کسی بعری هیچ چیز جا کس هرگز یا تنها بلکه خیاه بله بلی آره آری مرسی البتّه لطفاً ّه انکه وقتیکه همین پیش مدّتی هنگامی مان تان).freeze
|
5
|
+
ABBREVIATIONS = Set.new([]).freeze
|
6
|
+
STOP_WORDS = Set.new(%w(و در به از كه مي اين است را با هاي براي آن يك شود شده خود ها كرد شد اي تا كند بر بود گفت نيز وي هم كنند دارد ما كرده يا اما بايد دو اند هر خواهد او مورد آنها باشد ديگر مردم نمي بين پيش پس اگر همه صورت يكي هستند بي من دهد هزار نيست استفاده داد داشته راه داشت چه همچنين كردند داده بوده دارند همين ميليون سوي شوند بيشتر بسيار روي گرفته هايي تواند اول نام هيچ چند جديد بيش شدن كردن كنيم نشان حتي اينكه ولی توسط چنين برخي نه ديروز دوم درباره بعد مختلف گيرد شما گفته آنان بار طور گرفت دهند گذاري بسياري طي بودند ميليارد بدون تمام كل تر براساس شدند ترين امروز باشند ندارد چون قابل گويد ديگري همان خواهند قبل آمده اكنون تحت طريق گيري جاي هنوز چرا البته كنيد سازي سوم كنم بلكه زير توانند ضمن فقط بودن حق آيد وقتي اش يابد نخستين مقابل خدمات امسال تاكنون مانند تازه آورد فكر آنچه نخست نشده شايد چهار جريان پنج ساخته زيرا نزديك برداري كسي ريزي رفت گردد مثل آمد ام بهترين دانست كمتر دادن تمامي جلوگيري بيشتري ايم ناشي چيزي آنكه بالا بنابراين ايشان بعضي دادند داشتند برخوردار نخواهد هنگام نبايد غير نبود ديده وگو داريم چگونه بندي خواست فوق ده نوعي هستيم ديگران همچنان سراسر ندارند گروهي سعي روزهاي آنجا يكديگر كردم بيست بروز سپس رفته آورده نمايد باشيم گويند زياد خويش همواره گذاشته شش نداشته شناسي خواهيم آباد داشتن نظير همچون باره نكرده شان سابق هفت دانند جايي بی جز زیرِ رویِ سریِ تویِ جلویِ پیشِ عقبِ بالایِ خارجِ وسطِ بیرونِ سویِ کنارِ پاعینِ نزدِ نزدیکِ دنبالِ حدودِ برابرِ طبقِ مانندِ ضدِّ هنگامِ برایِ مثلِ بارة اثرِ تولِ علّتِ سمتِ عنوانِ قصدِ روب جدا کی که چیست هست کجا کجاست کَی چطور کدام آیا مگر چندین یک چیزی دیگر کسی بعری هیچ چیز جا کس هرگز یا تنها بلکه خیاه بله بلی آره آری مرسی البتّه لطفاً ّه انکه وقتیکه همین پیش مدّتی هنگامی مان تان)).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Polish
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = ['ags', 'alb', 'ang', 'aor', 'awest', 'bałt', 'bojkow', 'bret', 'brus', 'bsł', 'bułg', 'c.b.d.o', 'c.b.d.u', 'celt', 'chorw', 'cs', 'czakaw', 'czerw', 'czes', 'dłuż', 'dniem', 'dor', 'dubrow', 'duń', 'ekaw', 'fiń', 'franc', 'gal', 'germ', 'głuż', 'gniem', 'goc', 'gr', 'grudz', 'hebr', 'het', 'hol', 'I cont', 'ie', 'ikaw', 'irań', 'irl', 'islandz', 'itd', 'itd.', 'itp', 'jekaw', 'kajkaw', 'kasz', 'kirg', 'kwiec', 'łac', 'lip', 'listop', 'lit', 'łot', 'lp', 'maced', 'mar', 'młpol', 'moraw', 'n.e', 'nb.', 'ngr', 'niem', 'nord', 'norw', 'np', 'np.', 'ok.', 'orm', 'oset', 'osk', 'p.n', 'p.n.e', 'p.o', 'pazdz', 'pers', 'pie', 'pod red.', 'podhal', 'pol', 'połab', 'port', 'prekm', 'pskow', 'psł', 'R cont', 'rez', 'rom', 'rozdz.', 'rum', 'rus', 'rys.', 'sas', 'sch', 'scs', 'serb', 'sierp', 'śl', 'sła', 'słe', 'słi', 'słow', 'sp. z o.o', 'śrdniem', 'śrgniem', 'śrirl', 'stbułg', 'stind', 'stpol', 'stpr', 'str.', 'strus', 'stwniem', 'stycz', 'sztokaw', 'szwedz', 't.', 'tj.', 'tłum.', 'toch', 'tur', 'tzn', 'ukr', 'ul', 'umbr', 'wed', 'węg', 'wlkpol', 'włos', 'wrzes', 'wyd.', 'zakarp'].freeze
|
6
|
-
STOP_WORDS = %w(ach aj albo bardzo bez bo być ci cię ciebie co czy daleko dla dlaczego dlatego do dobrze dokąd dość dużo dwa dwaj dwie dwoje dziś dzisiaj gdyby gdzie go ich ile im inny ja ją jak jakby jaki je jeden jedna jedno jego jej jemu jeśli jest jestem jeżeli już każdy kiedy kierunku kto ku lub ma mają mam mi mną mnie moi mój moja moje może mu my na nam nami nas nasi nasz nasza nasze natychmiast nią nic nich nie niego niej niemu nigdy nim nimi niż obok od około on ona one oni ono owszem po pod ponieważ przed przedtem są sam sama się skąd tak taki tam ten to tobą tobie tu tutaj twoi twój twoja twoje ty wam wami was wasi wasz wasza wasze we więc wszystko wtedy wy żaden zawsze że a aby ach acz aczkolwiek ale ależ aż bardziej bowiem by byli bynajmniej był była było były będzie będą cali cała cały cokolwiek coś czasami czasem czemu czyli gdy gdyż gdziekolwiek gdzieś i inna inne innych iż jakaś jakichś jakie jakiś jakiż jakkolwiek jako jakoś jednak jednakże jeszcze kilka kimś ktokolwiek ktoś która które którego której który których którym którzy lat lecz mimo między mogą moim możliwe można musi nad naszego naszych natomiast nawet no o oraz pan pana pani podczas pomimo ponad powinien powinna powinni powinno poza prawie przecież przede przez przy roku również sobie sobą sposób swoje ta taka takie także te tego tej teraz też totobą toteż trzeba twoim twym tych tylko tym u w według wiele wielu więcej wszyscy wszystkich wszystkie wszystkim właśnie z za zapewne zeznowu znów został żadna żadne żadnych żeby).freeze
|
5
|
+
ABBREVIATIONS = Set.new(['ags', 'alb', 'ang', 'aor', 'awest', 'bałt', 'bojkow', 'bret', 'brus', 'bsł', 'bułg', 'c.b.d.o', 'c.b.d.u', 'celt', 'chorw', 'cs', 'czakaw', 'czerw', 'czes', 'dłuż', 'dniem', 'dor', 'dubrow', 'duń', 'ekaw', 'fiń', 'franc', 'gal', 'germ', 'głuż', 'gniem', 'goc', 'gr', 'grudz', 'hebr', 'het', 'hol', 'I cont', 'ie', 'ikaw', 'irań', 'irl', 'islandz', 'itd', 'itd.', 'itp', 'jekaw', 'kajkaw', 'kasz', 'kirg', 'kwiec', 'łac', 'lip', 'listop', 'lit', 'łot', 'lp', 'maced', 'mar', 'młpol', 'moraw', 'n.e', 'nb.', 'ngr', 'niem', 'nord', 'norw', 'np', 'np.', 'ok.', 'orm', 'oset', 'osk', 'p.n', 'p.n.e', 'p.o', 'pazdz', 'pers', 'pie', 'pod red.', 'podhal', 'pol', 'połab', 'port', 'prekm', 'pskow', 'psł', 'R cont', 'rez', 'rom', 'rozdz.', 'rum', 'rus', 'rys.', 'sas', 'sch', 'scs', 'serb', 'sierp', 'śl', 'sła', 'słe', 'słi', 'słow', 'sp. z o.o', 'śrdniem', 'śrgniem', 'śrirl', 'stbułg', 'stind', 'stpol', 'stpr', 'str.', 'strus', 'stwniem', 'stycz', 'sztokaw', 'szwedz', 't.', 'tj.', 'tłum.', 'toch', 'tur', 'tzn', 'ukr', 'ul', 'umbr', 'wed', 'węg', 'wlkpol', 'włos', 'wrzes', 'wyd.', 'zakarp']).freeze
|
6
|
+
STOP_WORDS = Set.new(%w(ach aj albo bardzo bez bo być ci cię ciebie co czy daleko dla dlaczego dlatego do dobrze dokąd dość dużo dwa dwaj dwie dwoje dziś dzisiaj gdyby gdzie go ich ile im inny ja ją jak jakby jaki je jeden jedna jedno jego jej jemu jeśli jest jestem jeżeli już każdy kiedy kierunku kto ku lub ma mają mam mi mną mnie moi mój moja moje może mu my na nam nami nas nasi nasz nasza nasze natychmiast nią nic nich nie niego niej niemu nigdy nim nimi niż obok od około on ona one oni ono owszem po pod ponieważ przed przedtem są sam sama się skąd tak taki tam ten to tobą tobie tu tutaj twoi twój twoja twoje ty wam wami was wasi wasz wasza wasze we więc wszystko wtedy wy żaden zawsze że a aby ach acz aczkolwiek ale ależ aż bardziej bowiem by byli bynajmniej był była było były będzie będą cali cała cały cokolwiek coś czasami czasem czemu czyli gdy gdyż gdziekolwiek gdzieś i inna inne innych iż jakaś jakichś jakie jakiś jakiż jakkolwiek jako jakoś jednak jednakże jeszcze kilka kimś ktokolwiek ktoś która które którego której który których którym którzy lat lecz mimo między mogą moim możliwe można musi nad naszego naszych natomiast nawet no o oraz pan pana pani podczas pomimo ponad powinien powinna powinni powinno poza prawie przecież przede przez przy roku również sobie sobą sposób swoje ta taka takie także te tego tej teraz też totobą toteż trzeba twoim twym tych tylko tym u w według wiele wielu więcej wszyscy wszystkich wszystkie wszystkim właśnie z za zapewne zeznowu znów został żadna żadne żadnych żeby)).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Portuguese
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = [].freeze
|
6
|
-
STOP_WORDS = %w(acerca agora algmas alguns ali ambos antes apontar aquela aquelas aquele aqueles aqui atrás bem bom cada caminho cima com como comprido conhecido corrente das debaixo dentro desde desligado deve devem deverá direita diz dizer dois dos e é ela ele eles em enquanto então está estado estão estar estará este estes esteve estive estivemos estiveram eu fará faz fazer fazia fez fim foi fora horas iniciar inicio ir irá ista iste isto ligado maioria maiorias mais mas mesmo meu muito muitos não nome nós nosso novo o onde os ou outro para parte pegar pelo pessoas pode poderá podia por porque povo promeiro qual qualquer quando quê quem quieto saber são sem ser seu somente tal também tem têm tempo tenho tentar tentaram tente tentei teu teve tipo tive todos trabalhar trabalho tu último um uma umas uns usa usar valor veja ver verdade verdadeiro você a à adeus aí ainda além algo algumas ano anos ao aos apenas apoio após aquilo área as às assim até através baixo bastante boa boas bons breve cá catorze cedo cento certamente certeza cinco coisa conselho contra custa da dá dão daquela daquelas daquele daqueles dar de demais depois dessa dessas desse desses desta destas deste destes dez dezanove dezasseis dezassete dezoito dia diante dizem do doze duas dúvida elas embora entre era és essa essas esse esses esta estas estás estava estiveste estivestes estou exemplo faço falta favor fazeis fazem fazemos fazes final fomos for foram forma foste fostes fui geral grande grandes grupo há hoje hora isso já lá lado local logo longe lugar maior mal máximo me meio menor menos mês meses meus mil minha minhas momento na nada naquela naquelas naquele naqueles nas nem nenhuma nessa nessas nesse nesses nesta nestas neste nestes nível no noite nos nossa nossas nossos nova novas nove novos num numa número nunca obra obrigada obrigado oitava oitavo oito ontem onze outra outras outros parece partir paucas pela pelas pelos perto pôde podem poder põe põem ponto pontos porquê posição possível possivelmente posso pouca pouco poucos primeira primeiras primeiro primeiros própria próprias próprio próprios próxima próximas próximo próximos puderam quáis quanto quarta quarto quatro que quer quereis querem queremas queres quero questão quinta quinto quinze relação sabe sabem se segunda segundo sei seis sempre seria sete sétima sétimo seus sexta sexto sim sistema sob sobre sois somos sou sua suas talvez tanta tantas tanto tão tarde te temos tendes tens ter terceira terceiro teus tivemos tiveram tiveste tivestes toda todas todo três treze tua tuas tudo vai vais vão vários vem vêm vens vez vezes viagem vindo vinte vocês vos vós vossa vossas vosso vossos zero and).freeze
|
5
|
+
ABBREVIATIONS = Set.new([]).freeze
|
6
|
+
STOP_WORDS = Set.new(%w(acerca agora algmas alguns ali ambos antes apontar aquela aquelas aquele aqueles aqui atrás bem bom cada caminho cima com como comprido conhecido corrente das debaixo dentro desde desligado deve devem deverá direita diz dizer dois dos e é ela ele eles em enquanto então está estado estão estar estará este estes esteve estive estivemos estiveram eu fará faz fazer fazia fez fim foi fora horas iniciar inicio ir irá ista iste isto ligado maioria maiorias mais mas mesmo meu muito muitos não nome nós nosso novo o onde os ou outro para parte pegar pelo pessoas pode poderá podia por porque povo promeiro qual qualquer quando quê quem quieto saber são sem ser seu somente tal também tem têm tempo tenho tentar tentaram tente tentei teu teve tipo tive todos trabalhar trabalho tu último um uma umas uns usa usar valor veja ver verdade verdadeiro você a à adeus aí ainda além algo algumas ano anos ao aos apenas apoio após aquilo área as às assim até através baixo bastante boa boas bons breve cá catorze cedo cento certamente certeza cinco coisa conselho contra custa da dá dão daquela daquelas daquele daqueles dar de demais depois dessa dessas desse desses desta destas deste destes dez dezanove dezasseis dezassete dezoito dia diante dizem do doze duas dúvida elas embora entre era és essa essas esse esses esta estas estás estava estiveste estivestes estou exemplo faço falta favor fazeis fazem fazemos fazes final fomos for foram forma foste fostes fui geral grande grandes grupo há hoje hora isso já lá lado local logo longe lugar maior mal máximo me meio menor menos mês meses meus mil minha minhas momento na nada naquela naquelas naquele naqueles nas nem nenhuma nessa nessas nesse nesses nesta nestas neste nestes nível no noite nos nossa nossas nossos nova novas nove novos num numa número nunca obra obrigada obrigado oitava oitavo oito ontem onze outra outras outros parece partir paucas pela pelas pelos perto pôde podem poder põe põem ponto pontos porquê posição possível possivelmente posso pouca pouco poucos primeira primeiras primeiro primeiros própria próprias próprio próprios próxima próximas próximo próximos puderam quáis quanto quarta quarto quatro que quer quereis querem queremas queres quero questão quinta quinto quinze relação sabe sabem se segunda segundo sei seis sempre seria sete sétima sétimo seus sexta sexto sim sistema sob sobre sois somos sou sua suas talvez tanta tantas tanto tão tarde te temos tendes tens ter terceira terceiro teus tivemos tiveram tiveste tivestes toda todas todo três treze tua tuas tudo vai vais vão vários vem vêm vens vez vezes viagem vindo vinte vocês vos vós vossa vossas vosso vossos zero and)).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Romanian
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = [].freeze
|
6
|
-
STOP_WORDS = ["acea", "aceasta", "această", "aceea", "acei", "aceia", "acel", "acela", "acele", "acelea", "acest", "acesta", "aceste", "acestea", "aceşti", "aceştia", "acolo", "acord", "acum", "ai", "aia", "aibă", "aici", "al", "ăla", "ale", "alea", "ălea", "altceva", "altcineva", "am", "ar", "are", "aş", "aşadar", "asemenea", "asta", "ăsta", "astăzi", "astea", "ăstea", "ăştia", "asupra", "aţi", "au", "avea", "avem", "aveţi", "azi", "bine", "bucur", "bună", "ca", "că", "căci", "când", "care", "cărei", "căror", "cărui", "cât", "câte", "câţi", "către", "câtva", "caut", "ce", "cel", "ceva", "chiar", "cinci", "cînd", "cine", "cineva", "cît", "cîte", "cîţi", "cîtva", "contra", "cu", "cum", "cumva", "curând", "curînd", "da", "dă", "dacă", "dar", "dată", "datorită", "dau", "de", "deci", "deja", "deoarece", "departe", "deşi", "din", "dinaintea", "dintr-", "dintre", "doi", "doilea", "două", "drept", "după", "ea", "ei", "el", "ele", "eram", "este", "eşti", "eu", "face", "fără", "fata", "fi", "fie", "fiecare", "fii", "fim", "fiţi", "fiu", "frumos", "graţie", "halbă", "iar", "ieri", "îi", "îl", "îmi", "împotriva", "în", "înainte", "înaintea", "încât", "încît", "încotro", "între", "întrucât", "întrucît", "îţi", "la", "lângă", "le", "li", "lîngă", "lor", "lui", "mă", "mai", "mâine", "mea", "mei", "mele", "mereu", "meu", "mi", "mie", "mîine", "mine", "mult", "multă", "mulţi", "mulţumesc", "ne", "nevoie", "nicăieri", "nici", "nimeni", "nimeri", "nimic", "nişte", "noastră", "noastre", "noi", "noroc", "noştri", "nostru", "nouă", "nu", "opt", "ori", "oricând", "oricare", "oricât", "orice", "oricînd", "oricine", "oricît", "oricum", "oriunde", "până", "patra", "patru", "patrulea", "pe", "pentru", "peste", "pic", "pînă", "poate", "pot", "prea", "prima", "primul", "prin", "puţin", "puţina", "puţină", "rog", "sa", "să", "săi", "sale", "şapte", "şase", "sau", "său", "se", "şi", "sînt", "sîntem", "sînteţi", "spate", "spre", "ştiu", "sub", "sunt", "suntem", "sunteţi", "sută", "ta", "tăi", "tale", "tău", "te", "ţi", "ţie", "timp", "tine", "toată", "toate", "tot", "toţi", "totuşi", "trei", "treia", "treilea", "tu", "un", "una", "unde", "undeva", "unei", "uneia", "unele", "uneori", "unii", "unor", "unora", "unu", "unui", "unuia", "unul", "vă", "vi", "voastră", "voastre", "voi", "vor", "voştri", "vostru", "vouă", "vreme", "vreo", "vreun", "zece", "zero", "zi", "zice"].freeze
|
5
|
+
ABBREVIATIONS = Set.new([]).freeze
|
6
|
+
STOP_WORDS = Set.new(["acea", "aceasta", "această", "aceea", "acei", "aceia", "acel", "acela", "acele", "acelea", "acest", "acesta", "aceste", "acestea", "aceşti", "aceştia", "acolo", "acord", "acum", "ai", "aia", "aibă", "aici", "al", "ăla", "ale", "alea", "ălea", "altceva", "altcineva", "am", "ar", "are", "aş", "aşadar", "asemenea", "asta", "ăsta", "astăzi", "astea", "ăstea", "ăştia", "asupra", "aţi", "au", "avea", "avem", "aveţi", "azi", "bine", "bucur", "bună", "ca", "că", "căci", "când", "care", "cărei", "căror", "cărui", "cât", "câte", "câţi", "către", "câtva", "caut", "ce", "cel", "ceva", "chiar", "cinci", "cînd", "cine", "cineva", "cît", "cîte", "cîţi", "cîtva", "contra", "cu", "cum", "cumva", "curând", "curînd", "da", "dă", "dacă", "dar", "dată", "datorită", "dau", "de", "deci", "deja", "deoarece", "departe", "deşi", "din", "dinaintea", "dintr-", "dintre", "doi", "doilea", "două", "drept", "după", "ea", "ei", "el", "ele", "eram", "este", "eşti", "eu", "face", "fără", "fata", "fi", "fie", "fiecare", "fii", "fim", "fiţi", "fiu", "frumos", "graţie", "halbă", "iar", "ieri", "îi", "îl", "îmi", "împotriva", "în", "înainte", "înaintea", "încât", "încît", "încotro", "între", "întrucât", "întrucît", "îţi", "la", "lângă", "le", "li", "lîngă", "lor", "lui", "mă", "mai", "mâine", "mea", "mei", "mele", "mereu", "meu", "mi", "mie", "mîine", "mine", "mult", "multă", "mulţi", "mulţumesc", "ne", "nevoie", "nicăieri", "nici", "nimeni", "nimeri", "nimic", "nişte", "noastră", "noastre", "noi", "noroc", "noştri", "nostru", "nouă", "nu", "opt", "ori", "oricând", "oricare", "oricât", "orice", "oricînd", "oricine", "oricît", "oricum", "oriunde", "până", "patra", "patru", "patrulea", "pe", "pentru", "peste", "pic", "pînă", "poate", "pot", "prea", "prima", "primul", "prin", "puţin", "puţina", "puţină", "rog", "sa", "să", "săi", "sale", "şapte", "şase", "sau", "său", "se", "şi", "sînt", "sîntem", "sînteţi", "spate", "spre", "ştiu", "sub", "sunt", "suntem", "sunteţi", "sută", "ta", "tăi", "tale", "tău", "te", "ţi", "ţie", "timp", "tine", "toată", "toate", "tot", "toţi", "totuşi", "trei", "treia", "treilea", "tu", "un", "una", "unde", "undeva", "unei", "uneia", "unele", "uneori", "unii", "unor", "unora", "unu", "unui", "unuia", "unul", "vă", "vi", "voastră", "voastre", "voi", "vor", "voştri", "vostru", "vouă", "vreme", "vreo", "vreun", "zece", "zero", "zi", "zice"]).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Russian
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = ["y", "y.e", "а", "авт", "адм.-терр", "акад", "в", "вв", "вкз", "вост.-европ", "г", "гг", "гос", "гр", "д", "деп", "дисс", "дол", "долл", "ежедн", "ж", "жен", "з", "зап", "зап.-европ", "заруб", "и", "ин", "иностр", "инст", "к", "канд", "кв", "кг", "куб", "л", "л.h", "л.н", "м", "мин", "моск", "муж", "н", "нед", "о", "п", "пгт", "пер", "пп", "пр", "просп", "проф", "р", "руб", "с", "сек", "см", "спб", "стр", "т", "тел", "тов", "тт", "тыс", "у", "у.е", "ул", "ф", "ч"].freeze
|
6
|
-
STOP_WORDS = %w(а е и ж м о на не ни об но он мне мои мож она они оно мной много многочисленное многочисленная многочисленные многочисленный мною мой мог могут можно может можхо мор моя моё мочь над нее оба нам нем нами ними мимо немного одной одного менее однажды однако меня нему меньше ней наверху него ниже мало надо один одиннадцать одиннадцатый назад наиболее недавно миллионов недалеко между низко меля нельзя нибудь непрерывно наконец никогда никуда нас наш нет нею неё них мира наша наше наши ничего начала нередко несколько обычно опять около мы ну нх от отовсюду особенно нужно очень отсюда в во вон вниз внизу вокруг вот восемнадцать восемнадцатый восемь восьмой вверх вам вами важное важная важные важный вдали везде ведь вас ваш ваша ваше ваши впрочем весь вдруг вы все второй всем всеми времени время всему всего всегда всех всею всю вся всё всюду г год говорил говорит года году где да ее за из ли же им до по ими под иногда довольно именно долго позже более должно пожалуйста значит иметь больше пока ему имя пор пора потом потому после почему почти посреди ей два две двенадцать двенадцатый двадцать двадцатый двух его дел или без день занят занята занято заняты действительно давно девятнадцать девятнадцатый девять девятый даже алло жизнь далеко близко здесь дальше для лет зато даром первый перед затем зачем лишь десять десятый ею её их бы еще при был про процентов против просто бывает бывь если люди была были было будем будет будете будешь прекрасно буду будь будто будут ещё пятнадцать пятнадцатый друго другое другой другие другая других есть пять быть лучше пятый к ком конечно кому кого когда которой которого которая которые который которых кем каждое каждая каждые каждый кажется как какой какая кто кроме куда кругом с т у я та те уж со то том снова тому совсем того тогда тоже собой тобой собою тобою сначала только уметь тот тою хорошо хотеть хочешь хоть хотя свое свои твой своей своего своих свою твоя твоё раз уже сам там тем чем сама сами теми само рано самом самому самой самого семнадцать семнадцатый самим самими самих саму семь чему раньше сейчас чего сегодня себе тебе сеаой человек разве теперь себя тебя седьмой спасибо слишком так такое такой такие также такая сих тех чаще четвертый через часто шестой шестнадцать шестнадцатый шесть четыре четырнадцать четырнадцатый сколько сказал сказала сказать ту ты три эта эти что это чтоб этом этому этой этого чтобы этот стал туда этим этими рядом тринадцать тринадцатый этих третий тут эту суть чуть тысяч).freeze
|
5
|
+
ABBREVIATIONS = Set.new(["y", "y.e", "а", "авт", "адм.-терр", "акад", "в", "вв", "вкз", "вост.-европ", "г", "гг", "гос", "гр", "д", "деп", "дисс", "дол", "долл", "ежедн", "ж", "жен", "з", "зап", "зап.-европ", "заруб", "и", "ин", "иностр", "инст", "к", "канд", "кв", "кг", "куб", "л", "л.h", "л.н", "м", "мин", "моск", "муж", "н", "нед", "о", "п", "пгт", "пер", "пп", "пр", "просп", "проф", "р", "руб", "с", "сек", "см", "спб", "стр", "т", "тел", "тов", "тт", "тыс", "у", "у.е", "ул", "ф", "ч"]).freeze
|
6
|
+
STOP_WORDS = Set.new(%w(а е и ж м о на не ни об но он мне мои мож она они оно мной много многочисленное многочисленная многочисленные многочисленный мною мой мог могут можно может можхо мор моя моё мочь над нее оба нам нем нами ними мимо немного одной одного менее однажды однако меня нему меньше ней наверху него ниже мало надо один одиннадцать одиннадцатый назад наиболее недавно миллионов недалеко между низко меля нельзя нибудь непрерывно наконец никогда никуда нас наш нет нею неё них мира наша наше наши ничего начала нередко несколько обычно опять около мы ну нх от отовсюду особенно нужно очень отсюда в во вон вниз внизу вокруг вот восемнадцать восемнадцатый восемь восьмой вверх вам вами важное важная важные важный вдали везде ведь вас ваш ваша ваше ваши впрочем весь вдруг вы все второй всем всеми времени время всему всего всегда всех всею всю вся всё всюду г год говорил говорит года году где да ее за из ли же им до по ими под иногда довольно именно долго позже более должно пожалуйста значит иметь больше пока ему имя пор пора потом потому после почему почти посреди ей два две двенадцать двенадцатый двадцать двадцатый двух его дел или без день занят занята занято заняты действительно давно девятнадцать девятнадцатый девять девятый даже алло жизнь далеко близко здесь дальше для лет зато даром первый перед затем зачем лишь десять десятый ею её их бы еще при был про процентов против просто бывает бывь если люди была были было будем будет будете будешь прекрасно буду будь будто будут ещё пятнадцать пятнадцатый друго другое другой другие другая других есть пять быть лучше пятый к ком конечно кому кого когда которой которого которая которые который которых кем каждое каждая каждые каждый кажется как какой какая кто кроме куда кругом с т у я та те уж со то том снова тому совсем того тогда тоже собой тобой собою тобою сначала только уметь тот тою хорошо хотеть хочешь хоть хотя свое свои твой своей своего своих свою твоя твоё раз уже сам там тем чем сама сами теми само рано самом самому самой самого семнадцать семнадцатый самим самими самих саму семь чему раньше сейчас чего сегодня себе тебе сеаой человек разве теперь себя тебя седьмой спасибо слишком так такое такой такие также такая сих тех чаще четвертый через часто шестой шестнадцать шестнадцатый шесть четыре четырнадцать четырнадцатый сколько сказал сказала сказать ту ты три эта эти что это чтоб этом этому этой этого чтобы этот стал туда этим этими рядом тринадцать тринадцатый этих третий тут эту суть чуть тысяч)).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Slovak
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = [].freeze
|
6
|
-
STOP_WORDS = %w(a aby aj ak ako ale alebo and ani áno asi až bez bude budem budeš budeme budete budú by bol bola boli bolo byť cez čo či ďalší ďalšia ďalšie dnes do ho ešte for i ja je jeho jej ich iba iné iný som si sme sú k kam každý každá každé každí kde keď kto ktorá ktoré ktorou ktorý ktorí ku lebo len ma mať má máte medzi mi mna mne mnou musieť môcť môj môže my na nad nám náš naši nie nech než nič niektorý nové nový nová noví o od odo of on ona ono oni ony po pod podľa pokiaľ potom práve pre prečo preto pretože prvý prvá prvé prví pred predo pri pýta s sa so svoje svoj svojich svojím svojími ta tak takže táto teda te tě ten tento the tieto tým týmto tiež to toto toho tohoto tom tomto tomuto tu tú túto tvoj ty tvojími už v vám váš vaše vo viac však všetok vy z za zo že a buď ju menej moja moje späť ste tá tam).freeze
|
5
|
+
ABBREVIATIONS = Set.new([]).freeze
|
6
|
+
STOP_WORDS = Set.new(%w(a aby aj ak ako ale alebo and ani áno asi až bez bude budem budeš budeme budete budú by bol bola boli bolo byť cez čo či ďalší ďalšia ďalšie dnes do ho ešte for i ja je jeho jej ich iba iné iný som si sme sú k kam každý každá každé každí kde keď kto ktorá ktoré ktorou ktorý ktorí ku lebo len ma mať má máte medzi mi mna mne mnou musieť môcť môj môže my na nad nám náš naši nie nech než nič niektorý nové nový nová noví o od odo of on ona ono oni ony po pod podľa pokiaľ potom práve pre prečo preto pretože prvý prvá prvé prví pred predo pri pýta s sa so svoje svoj svojich svojím svojími ta tak takže táto teda te tě ten tento the tieto tým týmto tiež to toto toho tohoto tom tomto tomuto tu tú túto tvoj ty tvojími už v vám váš vaše vo viac však všetok vy z za zo že a buď ju menej moja moje späť ste tá tam)).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Spanish
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = ["a", "a.c", "a/c", "abr", "adj", "admón", "aero", "afmo", "ago", "almte", "ambi", "an", "anfi", "ante", "anti", "ap", "apdo", "archi", "arci", "arq", "art", "atte", "auto", "av", "avda", "bco", "bi", "bibl", "bien", "bis", "bs. as", "c", "c.f", "c.g", "c/c", "c/u", "cap", "cc.aa", "cdad", "cm", "co", "com", "con", "contra", "cra", "crio", "cta", "cuadri", "cuasi", "cuatri", "cv", "d.e.p", "da", "das", "dcha", "dcho", "de", "deci", "dep", "des", "di", "dic", "dicc", "dir", "dis", "dn", "do", "doc", "dom", "dpto", "dr", "dra", "dto", "ecto", "ee", "ej", "en", "endo", "entlo", "entre", "epi", "equi", "esq", "etc", "ex", "excmo", "ext", "extra", "f.c", "fca", "fdo", "febr", "ff. aa", "ff.cc", "fig", "fil", "fra", "g.p", "g/p", "geo", "gob", "gr", "gral", "grs", "hemi", "hetero", "hiper", "hipo", "hnos", "homo", "hs", "i", "igl", "iltre", "im", "imp", "impr", "impto", "in", "incl", "infra", "ing", "inst", "inter", "intra", "iso", "izdo", "izq", "izqdo", "j.c", "jue", "jul", "jun", "kg", "km", "lcdo", "ldo", "let", "lic", "ltd", "lun", "macro", "mar", "may", "mega", "mg", "micro", "min", "mini", "mié", "mm", "mono", "mt", "multi", "máx", "mín", "n. del t", "n.b", "neo", "no", "nos", "nov", "ntra. sra", "núm", "oct", "omni", "p", "p.a", "p.d", "p.ej", "p.v.p", "para", "pen", "ph", "ph.d", "pluri", "poli", "pos", "post", "pp", "ppal", "pre", "prev", "pro", "prof", "prov", "pseudo", "ptas", "pts", "pza", "pág", "págs", "párr", "párrf", "q.e.g.e", "q.e.p.d", "q.e.s.m", "re", "reg", "rep", "retro", "rr. hh", "rte", "s", "s. a", "s.a.r", "s.e", "s.l", "s.r.c", "s.r.l", "s.s.s", "s/n", "sdad", "seg", "semi", "sept", "seudo", "sig", "sobre", "sr", "sra", "sres", "srta", "sta", "sto", "sub", "super", "supra", "sáb", "t.v.e", "tamb", "tel", "tfno", "trans", "tras", "tri", "ud", "uds", "ulter", "ultra", "un", "uni", "univ", "uu", "v.b", "v.e", "vd", "vds", "vice", "vid", "vie", "vol", "vs", "vto", "yuxta"].freeze
|
6
|
-
STOP_WORDS = ["algún", "alguna", "algunas", "alguno", "algunos", "ambos", "ampleamos", "ante", "antes", "aquel", "aquellas", "aquellos", "aqui", "arriba", "atras", "bajo", "bastante", "bien", "cada", "cierta", "ciertas", "cierto", "ciertos", "como", "con", "conseguimos", "conseguir", "consigo", "consigue", "consiguen", "consigues", "cual", "cuando", "dentro", "desde", "donde", "dos", "el", "ellas", "ellos", "empleais", "emplean", "emplear", "empleas", "empleo", "en", "encima", "entonces", "entre", "era", "eramos", "eran", "eras", "eres", "es", "esta", "estaba", "estado", "estais", "estamos", "estan", "estoy", "fin", "fue", "fueron", "fui", "fuimos", "gueno", "ha", "hace", "haceis", "hacemos", "hacen", "hacer", "haces", "hago", "incluso", "intenta", "intentais", "intentamos", "intentan", "intentar", "intentas", "intento", "ir", "la", "largo", "las", "lo", "los", "mientras", "mio", "modo", "muchos", "muy", "nos", "nosotros", "otro", "para", "pero", "podeis", "podemos", "poder", "podria", "podriais", "podriamos", "podrian", "podrias", "por", "por qué", "porque", "primero", "puede", "pueden", "puedo", "quien", "sabe", "sabeis", "sabemos", "saben", "saber", "sabes", "ser", "si", "siendo", "sin", "sobre", "sois", "solamente", "solo", "somos", "soy", "su", "sus", "también", "teneis", "tenemos", "tener", "tengo", "tiempo", "tiene", "tienen", "todo", "trabaja", "trabajais", "trabajamos", "trabajan", "trabajar", "trabajas", "trabajo", "tras", "tuyo", "ultimo", "un", "una", "unas", "uno", "unos", "usa", "usais", "usamos", "usan", "usar", "usas", "uso", "va", "vais", "valor", "vamos", "van", "vaya", "verdad", "verdadera", "verdadero", "vosotras", "vosotros", "voy", "yo", "él", "ésta", "éstas", "éste", "éstos", "última", "últimas", "último", "últimos", "a", "añadió", "aún", "actualmente", "adelante", "además", "afirmó", "agregó", "ahí", "ahora", "al", "algún", "algo", "alrededor", "anterior", "apenas", "aproximadamente", "aquí", "así", "aseguró", "aunque", "ayer", "buen", "buena", "buenas", "bueno", "buenos", "cómo", "casi", "cerca", "cinco", "comentó", "conocer", "consideró", "considera", "contra", "cosas", "creo", "cuales", "cualquier", "cuanto", "cuatro", "cuenta", "da", "dado", "dan", "dar", "de", "debe", "deben", "debido", "decir", "dejó", "del", "demás", "después", "dice", "dicen", "dicho", "dieron", "diferente", "diferentes", "dijeron", "dijo", "dio", "durante", "e", "ejemplo", "ella", "ello", "embargo", "encuentra", "esa", "esas", "ese", "eso", "esos", "está", "están", "estaban", "estar", "estará", "estas", "este", "esto", "estos", "estuvo", "ex", "existe", "existen", "explicó", "expresó", "fuera", "gran", "grandes", "había", "habían", "haber", "habrá", "hacerlo", "hacia", "haciendo", "han", "hasta", "hay", "haya", "he", "hecho", "hemos", "hicieron", "hizo", "hoy", "hubo", "igual", "indicó", "informó", "junto", "lado", "le", "les", "llegó", "lleva", "llevar", "luego", "lugar", "más", "manera", "manifestó", "mayor", "me", "mediante", "mejor", "mencionó", "menos", "mi", "misma", "mismas", "mismo", "mismos", "momento", "mucha", "muchas", "mucho", "nada", "nadie", "ni", "ningún", "ninguna", "ningunas", "ninguno", "ningunos", "no", "nosotras", "nuestra", "nuestras", "nuestro", "nuestros", "nueva", "nuevas", "nuevo", "nuevos", "nunca", "o", "ocho", "otra", "otras", "otros", "parece", "parte", "partir", "pasada", "pasado", "pesar", "poca", "pocas", "poco", "pocos", "podrá", "podrán", "podría", "podrían", "poner", "posible", "próximo", "próximos", "primer", "primera", "primeros", "principalmente", "propia", "propias", "propio", "propios", "pudo", "pueda", "pues", "qué", "que", "quedó", "queremos", "quién", "quienes", "quiere", "realizó", "realizado", "realizar", "respecto", "sí", "sólo", "se", "señaló", "sea", "sean", "según", "segunda", "segundo", "seis", "será", "serán", "sería", "sido", "siempre", "siete", "sigue", "siguiente", "sino", "sola", "solas", "solos", "son", "tal", "tampoco", "tan", "tanto", "tenía", "tendrá", "tendrán", "tenga", "tenido", "tercera", "toda", "todas", "todavía", "todos", "total", "trata", "través", "tres", "tuvo", "usted", "varias", "varios", "veces", "ver", "vez", "y", "ya"].freeze
|
5
|
+
ABBREVIATIONS = Set.new(["a", "a.c", "a/c", "abr", "adj", "admón", "aero", "afmo", "ago", "almte", "ambi", "an", "anfi", "ante", "anti", "ap", "apdo", "archi", "arci", "arq", "art", "atte", "auto", "av", "avda", "bco", "bi", "bibl", "bien", "bis", "bs. as", "c", "c.f", "c.g", "c/c", "c/u", "cap", "cc.aa", "cdad", "cm", "co", "com", "con", "contra", "cra", "crio", "cta", "cuadri", "cuasi", "cuatri", "cv", "d.e.p", "da", "das", "dcha", "dcho", "de", "deci", "dep", "des", "di", "dic", "dicc", "dir", "dis", "dn", "do", "doc", "dom", "dpto", "dr", "dra", "dto", "ecto", "ee", "ej", "en", "endo", "entlo", "entre", "epi", "equi", "esq", "etc", "ex", "excmo", "ext", "extra", "f.c", "fca", "fdo", "febr", "ff. aa", "ff.cc", "fig", "fil", "fra", "g.p", "g/p", "geo", "gob", "gr", "gral", "grs", "hemi", "hetero", "hiper", "hipo", "hnos", "homo", "hs", "i", "igl", "iltre", "im", "imp", "impr", "impto", "in", "incl", "infra", "ing", "inst", "inter", "intra", "iso", "izdo", "izq", "izqdo", "j.c", "jue", "jul", "jun", "kg", "km", "lcdo", "ldo", "let", "lic", "ltd", "lun", "macro", "mar", "may", "mega", "mg", "micro", "min", "mini", "mié", "mm", "mono", "mt", "multi", "máx", "mín", "n. del t", "n.b", "neo", "no", "nos", "nov", "ntra. sra", "núm", "oct", "omni", "p", "p.a", "p.d", "p.ej", "p.v.p", "para", "pen", "ph", "ph.d", "pluri", "poli", "pos", "post", "pp", "ppal", "pre", "prev", "pro", "prof", "prov", "pseudo", "ptas", "pts", "pza", "pág", "págs", "párr", "párrf", "q.e.g.e", "q.e.p.d", "q.e.s.m", "re", "reg", "rep", "retro", "rr. hh", "rte", "s", "s. a", "s.a.r", "s.e", "s.l", "s.r.c", "s.r.l", "s.s.s", "s/n", "sdad", "seg", "semi", "sept", "seudo", "sig", "sobre", "sr", "sra", "sres", "srta", "sta", "sto", "sub", "super", "supra", "sáb", "t.v.e", "tamb", "tel", "tfno", "trans", "tras", "tri", "ud", "uds", "ulter", "ultra", "un", "uni", "univ", "uu", "v.b", "v.e", "vd", "vds", "vice", "vid", "vie", "vol", "vs", "vto", "yuxta"]).freeze
|
6
|
+
STOP_WORDS = Set.new(["algún", "alguna", "algunas", "alguno", "algunos", "ambos", "ampleamos", "ante", "antes", "aquel", "aquellas", "aquellos", "aqui", "arriba", "atras", "bajo", "bastante", "bien", "cada", "cierta", "ciertas", "cierto", "ciertos", "como", "con", "conseguimos", "conseguir", "consigo", "consigue", "consiguen", "consigues", "cual", "cuando", "dentro", "desde", "donde", "dos", "el", "ellas", "ellos", "empleais", "emplean", "emplear", "empleas", "empleo", "en", "encima", "entonces", "entre", "era", "eramos", "eran", "eras", "eres", "es", "esta", "estaba", "estado", "estais", "estamos", "estan", "estoy", "fin", "fue", "fueron", "fui", "fuimos", "gueno", "ha", "hace", "haceis", "hacemos", "hacen", "hacer", "haces", "hago", "incluso", "intenta", "intentais", "intentamos", "intentan", "intentar", "intentas", "intento", "ir", "la", "largo", "las", "lo", "los", "mientras", "mio", "modo", "muchos", "muy", "nos", "nosotros", "otro", "para", "pero", "podeis", "podemos", "poder", "podria", "podriais", "podriamos", "podrian", "podrias", "por", "por qué", "porque", "primero", "puede", "pueden", "puedo", "quien", "sabe", "sabeis", "sabemos", "saben", "saber", "sabes", "ser", "si", "siendo", "sin", "sobre", "sois", "solamente", "solo", "somos", "soy", "su", "sus", "también", "teneis", "tenemos", "tener", "tengo", "tiempo", "tiene", "tienen", "todo", "trabaja", "trabajais", "trabajamos", "trabajan", "trabajar", "trabajas", "trabajo", "tras", "tuyo", "ultimo", "un", "una", "unas", "uno", "unos", "usa", "usais", "usamos", "usan", "usar", "usas", "uso", "va", "vais", "valor", "vamos", "van", "vaya", "verdad", "verdadera", "verdadero", "vosotras", "vosotros", "voy", "yo", "él", "ésta", "éstas", "éste", "éstos", "última", "últimas", "último", "últimos", "a", "añadió", "aún", "actualmente", "adelante", "además", "afirmó", "agregó", "ahí", "ahora", "al", "algún", "algo", "alrededor", "anterior", "apenas", "aproximadamente", "aquí", "así", "aseguró", "aunque", "ayer", "buen", "buena", "buenas", "bueno", "buenos", "cómo", "casi", "cerca", "cinco", "comentó", "conocer", "consideró", "considera", "contra", "cosas", "creo", "cuales", "cualquier", "cuanto", "cuatro", "cuenta", "da", "dado", "dan", "dar", "de", "debe", "deben", "debido", "decir", "dejó", "del", "demás", "después", "dice", "dicen", "dicho", "dieron", "diferente", "diferentes", "dijeron", "dijo", "dio", "durante", "e", "ejemplo", "ella", "ello", "embargo", "encuentra", "esa", "esas", "ese", "eso", "esos", "está", "están", "estaban", "estar", "estará", "estas", "este", "esto", "estos", "estuvo", "ex", "existe", "existen", "explicó", "expresó", "fuera", "gran", "grandes", "había", "habían", "haber", "habrá", "hacerlo", "hacia", "haciendo", "han", "hasta", "hay", "haya", "he", "hecho", "hemos", "hicieron", "hizo", "hoy", "hubo", "igual", "indicó", "informó", "junto", "lado", "le", "les", "llegó", "lleva", "llevar", "luego", "lugar", "más", "manera", "manifestó", "mayor", "me", "mediante", "mejor", "mencionó", "menos", "mi", "misma", "mismas", "mismo", "mismos", "momento", "mucha", "muchas", "mucho", "nada", "nadie", "ni", "ningún", "ninguna", "ningunas", "ninguno", "ningunos", "no", "nosotras", "nuestra", "nuestras", "nuestro", "nuestros", "nueva", "nuevas", "nuevo", "nuevos", "nunca", "o", "ocho", "otra", "otras", "otros", "parece", "parte", "partir", "pasada", "pasado", "pesar", "poca", "pocas", "poco", "pocos", "podrá", "podrán", "podría", "podrían", "poner", "posible", "próximo", "próximos", "primer", "primera", "primeros", "principalmente", "propia", "propias", "propio", "propios", "pudo", "pueda", "pues", "qué", "que", "quedó", "queremos", "quién", "quienes", "quiere", "realizó", "realizado", "realizar", "respecto", "sí", "sólo", "se", "señaló", "sea", "sean", "según", "segunda", "segundo", "seis", "será", "serán", "sería", "sido", "siempre", "siete", "sigue", "siguiente", "sino", "sola", "solas", "solos", "son", "tal", "tampoco", "tan", "tanto", "tenía", "tendrá", "tendrán", "tenga", "tenido", "tercera", "toda", "todas", "todavía", "todos", "total", "trata", "través", "tres", "tuvo", "usted", "varias", "varios", "veces", "ver", "vez", "y", "ya"]).freeze
|
7
7
|
CONTRACTIONS = {
|
8
8
|
"al" => "a el",
|
9
9
|
"del" => "de el"
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Swedish
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = [].freeze
|
6
|
-
STOP_WORDS = %w(aderton adertonde adjö aldrig alla allas allt alltid alltså än andra andras annan annat ännu artonde artonn åtminstone att åtta åttio åttionde åttonde av även båda bådas bakom bara bäst bättre behöva behövas behövde behövt beslut beslutat beslutit bland blev bli blir blivit bort borta bra då dag dagar dagarna dagen där därför de del delen dem den deras dess det detta dig din dina dit ditt dock du efter eftersom elfte eller elva en enkel enkelt enkla enligt er era ert ett ettusen få fanns får fått fem femte femtio femtionde femton femtonde fick fin finnas finns fjärde fjorton fjortonde fler flera flesta följande för före förlåt förra första fram framför från fyra fyrtio fyrtionde gå gälla gäller gällt går gärna gått genast genom gick gjorde gjort god goda godare godast gör göra gott ha hade haft han hans har här heller hellre helst helt henne hennes hit hög höger högre högst hon honom hundra hundraen hundraett hur i ibland idag igår igen imorgon in inför inga ingen ingenting inget innan inne inom inte inuti ja jag jämfört kan kanske knappast kom komma kommer kommit kr kunde kunna kunnat kvar länge längre långsam långsammare långsammast långsamt längst långt lätt lättare lättast legat ligga ligger lika likställd likställda lilla lite liten litet man många måste med mellan men mer mera mest mig min mina mindre minst mitt mittemot möjlig möjligen möjligt möjligtvis mot mycket någon någonting något några när nästa ned nederst nedersta nedre nej ner ni nio nionde nittio nittionde nitton nittonde nödvändig nödvändiga nödvändigt nödvändigtvis nog noll nr nu nummer och också ofta oftast olika olikt om oss över övermorgon överst övre på rakt rätt redan så sade säga säger sagt samma sämre sämst sedan senare senast sent sex sextio sextionde sexton sextonde sig sin sina sist sista siste sitt sjätte sju sjunde sjuttio sjuttionde sjutton sjuttonde ska skall skulle slutligen små smått snart som stor stora större störst stort tack tidig tidigare tidigast tidigt till tills tillsammans tio tionde tjugo tjugoen tjugoett tjugonde tjugotre tjugotvå tjungo tolfte tolv tre tredje trettio trettionde tretton trettonde två tvåhundra under upp ur ursäkt ut utan utanför ute vad vänster vänstra var vår vara våra varför varifrån varit varken värre varsågod vart vårt vem vems verkligen vi vid vidare viktig viktigare viktigast viktigt vilka vilken vilket vill aderton).freeze
|
5
|
+
ABBREVIATIONS = Set.new([]).freeze
|
6
|
+
STOP_WORDS = Set.new(%w(aderton adertonde adjö aldrig alla allas allt alltid alltså än andra andras annan annat ännu artonde artonn åtminstone att åtta åttio åttionde åttonde av även båda bådas bakom bara bäst bättre behöva behövas behövde behövt beslut beslutat beslutit bland blev bli blir blivit bort borta bra då dag dagar dagarna dagen där därför de del delen dem den deras dess det detta dig din dina dit ditt dock du efter eftersom elfte eller elva en enkel enkelt enkla enligt er era ert ett ettusen få fanns får fått fem femte femtio femtionde femton femtonde fick fin finnas finns fjärde fjorton fjortonde fler flera flesta följande för före förlåt förra första fram framför från fyra fyrtio fyrtionde gå gälla gäller gällt går gärna gått genast genom gick gjorde gjort god goda godare godast gör göra gott ha hade haft han hans har här heller hellre helst helt henne hennes hit hög höger högre högst hon honom hundra hundraen hundraett hur i ibland idag igår igen imorgon in inför inga ingen ingenting inget innan inne inom inte inuti ja jag jämfört kan kanske knappast kom komma kommer kommit kr kunde kunna kunnat kvar länge längre långsam långsammare långsammast långsamt längst långt lätt lättare lättast legat ligga ligger lika likställd likställda lilla lite liten litet man många måste med mellan men mer mera mest mig min mina mindre minst mitt mittemot möjlig möjligen möjligt möjligtvis mot mycket någon någonting något några när nästa ned nederst nedersta nedre nej ner ni nio nionde nittio nittionde nitton nittonde nödvändig nödvändiga nödvändigt nödvändigtvis nog noll nr nu nummer och också ofta oftast olika olikt om oss över övermorgon överst övre på rakt rätt redan så sade säga säger sagt samma sämre sämst sedan senare senast sent sex sextio sextionde sexton sextonde sig sin sina sist sista siste sitt sjätte sju sjunde sjuttio sjuttionde sjutton sjuttonde ska skall skulle slutligen små smått snart som stor stora större störst stort tack tidig tidigare tidigast tidigt till tills tillsammans tio tionde tjugo tjugoen tjugoett tjugonde tjugotre tjugotvå tjungo tolfte tolv tre tredje trettio trettionde tretton trettonde två tvåhundra under upp ur ursäkt ut utan utanför ute vad vänster vänstra var vår vara våra varför varifrån varit varken värre varsågod vart vårt vem vems verkligen vi vid vidare viktig viktigare viktigast viktigt vilka vilken vilket vill aderton)).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -2,8 +2,8 @@ module PragmaticTokenizer
|
|
2
2
|
module Languages
|
3
3
|
module Turkish
|
4
4
|
include Languages::Common
|
5
|
-
ABBREVIATIONS = [].freeze
|
6
|
-
STOP_WORDS = %w(acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir birçok biri birkaç birkez birşey birşeyi biz bize bizden bizi bizim böyle böylece bu buna bunda bundan bunlar bunları bunların bunu bunun burada çok çünkü da daha dahi de defa değil diğer diye doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor eğer elli en etmesi etti ettiği ettiğini gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir için iki ile ilgili ise işte itibaren itibariyle kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduğu olduğunu olduklarını olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa öyle pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin şey şeyden şeyi şeyler şöyle şu şuna şunda şundan şunları şunu tarafından trilyon tüm üç üzere var vardı ve veya ya yani yapacak yapılan yapılması yapıyor yapmak yaptı yaptığı yaptığını yaptıkları yedi yerine yetmiş yine yirmi yoksa yüz zaten altmýþ altý bazý beþ birþey birþeyi INSERmi kýrk mý nasýl onlari onlarýn yetmiþ þey þeyden þeyi þeyler þu þuna þunda þundan þunu).freeze
|
5
|
+
ABBREVIATIONS = Set.new([]).freeze
|
6
|
+
STOP_WORDS = Set.new(%w(acaba altmış altı ama ancak arada aslında ayrıca bana bazı belki ben benden beni benim beri beş bile bin bir birçok biri birkaç birkez birşey birşeyi biz bize bizden bizi bizim böyle böylece bu buna bunda bundan bunlar bunları bunların bunu bunun burada çok çünkü da daha dahi de defa değil diğer diye doksan dokuz dolayı dolayısıyla dört edecek eden ederek edilecek ediliyor edilmesi ediyor eğer elli en etmesi etti ettiği ettiğini gibi göre halen hangi hatta hem henüz hep hepsi her herhangi herkesin hiç hiçbir için iki ile ilgili ise işte itibaren itibariyle kadar karşın katrilyon kendi kendilerine kendini kendisi kendisine kendisini kez ki kim kimden kime kimi kimse kırk milyar milyon mu mü mı nasıl ne neden nedenle nerde nerede nereye niye niçin o olan olarak oldu olduğu olduğunu olduklarını olmadı olmadığı olmak olması olmayan olmaz olsa olsun olup olur olursa oluyor on ona ondan onlar onlardan onları onların onu onun otuz oysa öyle pek rağmen sadece sanki sekiz seksen sen senden seni senin siz sizden sizi sizin şey şeyden şeyi şeyler şöyle şu şuna şunda şundan şunları şunu tarafından trilyon tüm üç üzere var vardı ve veya ya yani yapacak yapılan yapılması yapıyor yapmak yaptı yaptığı yaptığını yaptıkları yedi yerine yetmiş yine yirmi yoksa yüz zaten altmýþ altý bazý beþ birþey birþeyi INSERmi kýrk mý nasýl onlari onlarýn yetmiþ þey þeyden þeyi þeyler þu þuna þunda þundan þunu)).freeze
|
7
7
|
CONTRACTIONS = {}.freeze
|
8
8
|
end
|
9
9
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module PragmaticTokenizer
|
2
2
|
class PostProcessor
|
3
3
|
|
4
|
-
REGEX_SYMBOL = /[♳ ♴ ♵ ♶ ♷ ♸ ♹ ♺ ⚀ ⚁ ⚂ ⚃ ⚄ ⚅ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☠ ☢ ☣ ☤ ☥ ☦ ☧ ☀ ☁ ☂ ☃ ☄ ☮ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ⚘ ⚭]
|
5
|
-
REGEXP_COMMAS = /^(,|‚)
|
6
|
-
REGEXP_SINGLE_QUOTES = /(.+)(’|'|‘|`)
|
7
|
-
REGEXP_SLASH = /^(?!(https?:|www\.))(.*)\/(.*)
|
8
|
-
REGEXP_QUESTION_MARK = /^(?!(https?:|www\.))(.*)(\?)(.*)
|
9
|
-
REGEXP_PLUS_SIGN = /(.+)\+(.+)
|
10
|
-
REGEXP_COLON = /^(\:)(\S{2,})
|
11
|
-
REGEXP_EMOJI = /(\u{2744}[\u{FE0E}|\u{FE0F}])
|
4
|
+
REGEX_SYMBOL = /[♳ ♴ ♵ ♶ ♷ ♸ ♹ ♺ ⚀ ⚁ ⚂ ⚃ ⚄ ⚅ ☇ ☈ ☉ ☊ ☋ ☌ ☍ ☠ ☢ ☣ ☤ ☥ ☦ ☧ ☀ ☁ ☂ ☃ ☄ ☮ ♔ ♕ ♖ ♗ ♘ ♙ ♚ ⚘ ⚭]/
|
5
|
+
REGEXP_COMMAS = /^(,|‚)+/
|
6
|
+
REGEXP_SINGLE_QUOTES = /(.+)(’|'|‘|`)$/
|
7
|
+
REGEXP_SLASH = /^(?!(https?:|www\.))(.*)\/(.*)/
|
8
|
+
REGEXP_QUESTION_MARK = /^(?!(https?:|www\.))(.*)(\?)(.*)/
|
9
|
+
REGEXP_PLUS_SIGN = /(.+)\+(.+)/
|
10
|
+
REGEXP_COLON = /^(\:)(\S{2,})/
|
11
|
+
REGEXP_EMOJI = /(\u{2744}[\u{FE0E}|\u{FE0F}])/
|
12
12
|
|
13
13
|
REGEX_UNIFIED1 = Regexp.union(REGEXP_SLASH,
|
14
14
|
REGEXP_QUESTION_MARK,
|
@@ -16,12 +16,10 @@ module PragmaticTokenizer
|
|
16
16
|
REGEXP_COLON,
|
17
17
|
REGEXP_EMOJI,
|
18
18
|
PragmaticTokenizer::Languages::Common::PREFIX_EMOJI_REGEX,
|
19
|
-
PragmaticTokenizer::Languages::Common::POSTFIX_EMOJI_REGEX
|
20
|
-
).freeze
|
19
|
+
PragmaticTokenizer::Languages::Common::POSTFIX_EMOJI_REGEX)
|
21
20
|
|
22
21
|
REGEX_UNIFIED2 = Regexp.union(REGEXP_SINGLE_QUOTES,
|
23
|
-
REGEXP_COMMAS
|
24
|
-
).freeze
|
22
|
+
REGEXP_COMMAS)
|
25
23
|
|
26
24
|
attr_reader :text, :abbreviations, :downcase
|
27
25
|
|
@@ -96,7 +94,7 @@ module PragmaticTokenizer
|
|
96
94
|
if downcase
|
97
95
|
token.split(/(\.)/)[0]
|
98
96
|
else
|
99
|
-
UnicodeCaseConverter::
|
97
|
+
UnicodeCaseConverter::downcase(token.split(/(\.)/)[0])
|
100
98
|
end
|
101
99
|
end
|
102
100
|
|
@@ -9,9 +9,61 @@ require 'unicode_case_converter'
|
|
9
9
|
module PragmaticTokenizer
|
10
10
|
class Tokenizer
|
11
11
|
|
12
|
-
|
12
|
+
PUNCTIATION_OPTIONS = Set.new([:all, :semi, :none, :only]).freeze
|
13
|
+
NUMBERS_OPTIONS = Set.new([:all, :semi, :none, :only]).freeze
|
14
|
+
MENTIONS_OPTIONS = Set.new([:keep_original, :keep_and_clean, :remove]).freeze
|
15
|
+
MAX_TOKEN_LENGTH = 50
|
16
|
+
EMPTY_STRING = ''.freeze
|
17
|
+
DOT_STRING = '.'.freeze
|
18
|
+
SPACE_STRING = ' '.freeze
|
19
|
+
REGEX_DOMAIN = /(\s+|\A)[a-z0-9]{2,}([\-\.]{1}[a-z0-9]+)*\.[a-z]{2,6}(:[0-9]{1,5})?(\/.*)?/ix
|
20
|
+
REGEX_URL = /(http|https)(\.|:)/
|
21
|
+
REGEX_HYPHEN = /\-/
|
22
|
+
REGEX_UNDERSCORE = /\_/
|
23
|
+
REGEX_CONTRACTIONS = /[‘’‚‛‹›'´`]/
|
24
|
+
REGEX_APOSTROPHE_S = /['’`́]s$/
|
25
|
+
REGEX_EMAIL = /\S+(@|@)\S+\.\S+/
|
26
|
+
REGEX_HASHTAG_OR_MENTION = /[@@#|#]/
|
27
|
+
REGEX_UNDERSCORE_AT_START = /(?<=\A)\_+/
|
28
|
+
REGEX_UNDERSCORE_AT_END = /\_+(?=\z)/
|
29
|
+
REGEX_ASTERISK = /\*+/
|
30
|
+
REGEX_UNIFIED1 = Regexp.union(REGEX_UNDERSCORE_AT_START,
|
31
|
+
REGEX_UNDERSCORE_AT_END,
|
32
|
+
REGEX_ASTERISK)
|
33
|
+
# https://en.wikipedia.org/wiki/Control_character
|
34
|
+
# matches any character with hexadecimal value 00 through 1F or 7F.
|
35
|
+
# Rubular: http://rubular.com/r/E83fpBoDjI
|
36
|
+
REGEXP_CONTROL = /[[:cntrl:]]/
|
37
|
+
REGEXP_ENDING_COLON = /\:(?=\z)/
|
38
|
+
REGEXP_EXCLAMATION_AT_START = /(?<=\A)!+(?=.+)/
|
39
|
+
REGEXP_EXCLAMATION_AT_END = /!+(1*!*)*(?=\z)/
|
40
|
+
REGEXP_HYPHEN_AT_START = /\A(-|–|\u{00AD})/
|
41
|
+
REGEXP_SPECIAL_SYMBOL = /[®©]/
|
42
|
+
REGEXP_PERCENT_AT_START = /\A\%/
|
43
|
+
# https://codepoints.net/enclosed_alphanumeric_supplement
|
44
|
+
REGEXP_ALPHANUMERIC_SUPPLEMENT = /[\u{1F100}-\u{1F1FF}]/
|
45
|
+
REGEX_UNIFIED2 = Regexp.union(REGEXP_CONTROL,
|
46
|
+
REGEXP_ENDING_COLON,
|
47
|
+
REGEXP_EXCLAMATION_AT_START,
|
48
|
+
REGEXP_EXCLAMATION_AT_END,
|
49
|
+
REGEXP_HYPHEN_AT_START,
|
50
|
+
REGEXP_SPECIAL_SYMBOL,
|
51
|
+
REGEXP_PERCENT_AT_START,
|
52
|
+
REGEXP_ALPHANUMERIC_SUPPLEMENT)
|
53
|
+
REGEXP_ONE_AS_EXCLAMATION = /(?<=\D)1+(?=\z)/
|
54
|
+
REGEXP_HASHTAG_AT_START = /(?<=\A)(#|#)/
|
55
|
+
REGEXP_AT_SIGN_AT_START = /(?<=\A)(@|@)/
|
56
|
+
REGEXP_HYPHEN_HASTAG = /\A(#|#)\S+-/
|
57
|
+
REGEXP_EMOJI_SNOWFLAKE = /\u{2744}[\u{FE0F}|\u{FE0E}]?/
|
58
|
+
REGEX_EMOJI_UNIFIED = Regexp.union(REGEXP_EMOJI_SNOWFLAKE,
|
59
|
+
PragmaticTokenizer::Languages::Common::EMOJI_REGEX)
|
60
|
+
REGEXP_PUNCTUATION_ONLY = /\A[[:punct:]]+\z/
|
61
|
+
REGEXP_NUMBER_ONLY = /\A\d+\z/
|
62
|
+
REGEXP_NO_NUMBERS = /\A\D+\z/
|
63
|
+
REGEXP_NUMBER = /\D*\d+\d*/
|
64
|
+
REGEXP_CONSECUTIVE_DOTS = /\A\.{2,}\z/
|
65
|
+
REGEXP_CHUNK_STRING = /.{,10000}(?=\s|\z)/m
|
13
66
|
|
14
|
-
# @param [String] text to be tokenized
|
15
67
|
# @param [Hash] opts optional arguments
|
16
68
|
|
17
69
|
# @option opts [Array] :filter_languages - user-supplied array of languages from which that language's stop words, abbreviations and contractions should be used when calculating the resulting tokens - array elements should be of the String class or can be symbols
|
@@ -41,81 +93,62 @@ module PragmaticTokenizer
|
|
41
93
|
# @option opts [String] :mentions - :remove (will completely remove it), :keep_and_clean (will prefix) and :keep_original (don't alter the token at all). - can be a String or symbol (i.e. :keep_and_clean or 'keep_and_clean')
|
42
94
|
# @option opts [String] :hashtags - :remove (will completely remove it), :keep_and_clean (will prefix) and :keep_original (don't alter the token at all). - can be a String or symbol (i.e. :keep_and_clean or 'keep_and_clean')
|
43
95
|
# @option opts [Boolean] :downcase - (default: true)
|
96
|
+
# @option opts [Boolean] :clean - (default: false)
|
44
97
|
# @option opts [Boolean] :classic_filter - removes dots from acronyms and 's from the end of tokens - (default: false)
|
45
98
|
# @option opts [Boolean] :remove_emoji - (default: false)
|
46
99
|
# @option opts [Boolean] :remove_emails - (default: false)
|
47
100
|
# @option opts [Boolean] :remove_urls - (default: false)
|
48
101
|
# @option opts [Boolean] :remove_domains - (default: false)
|
49
102
|
|
50
|
-
def initialize(
|
51
|
-
@
|
52
|
-
@
|
53
|
-
@
|
54
|
-
@
|
55
|
-
@
|
56
|
-
@
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
103
|
+
def initialize(opts={})
|
104
|
+
@filter_languages = opts[:filter_languages] || []
|
105
|
+
@language_module = Languages.get_language_by_code(opts[:language])
|
106
|
+
@expand_contractions = opts[:expand_contractions]
|
107
|
+
@remove_stop_words = opts[:remove_stop_words]
|
108
|
+
@punctuation = opts[:punctuation] ? opts[:punctuation].to_sym : :all
|
109
|
+
@numbers = opts[:numbers] ? opts[:numbers].to_sym : :all
|
110
|
+
@minimum_length = opts[:minimum_length] || 0
|
111
|
+
@long_word_split = opts[:long_word_split]
|
112
|
+
@mentions = opts[:mentions] ? opts[:mentions].to_sym : :keep_original
|
113
|
+
@hashtags = opts[:hashtags] ? opts[:hashtags].to_sym : :keep_original
|
114
|
+
@downcase = opts[:downcase].nil? ? true : opts[:downcase]
|
115
|
+
@clean = opts[:clean]
|
116
|
+
@classic_filter = opts[:classic_filter]
|
117
|
+
@remove_emoji = opts[:remove_emoji]
|
118
|
+
@remove_emails = opts[:remove_emails]
|
119
|
+
@remove_urls = opts[:remove_urls]
|
120
|
+
@remove_domains = opts[:remove_domains]
|
121
|
+
@contractions = opts[:contractions] || {}
|
122
|
+
@abbreviations = Set.new(opts[:abbreviations])
|
123
|
+
@stop_words = Set.new(opts[:stop_words])
|
66
124
|
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
125
|
+
# TODO: why do we treat stop words differently than abbreviations and contractions? (we don't use @language_module::STOP_WORDS when passing @filter_languages)
|
126
|
+
@contractions.merge!(@language_module::CONTRACTIONS) if @contractions.empty?
|
127
|
+
@abbreviations += @language_module::ABBREVIATIONS if @abbreviations.empty?
|
128
|
+
@stop_words += @language_module::STOP_WORDS if @stop_words.empty? && @filter_languages.empty?
|
71
129
|
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
@
|
130
|
+
@filter_languages.each do |lang|
|
131
|
+
language = Languages.get_language_by_code(lang)
|
132
|
+
@contractions.merge!(language::CONTRACTIONS)
|
133
|
+
@abbreviations += language::ABBREVIATIONS
|
134
|
+
@stop_words += language::STOP_WORDS
|
76
135
|
end
|
77
|
-
@punctuation = opts[:punctuation] || 'all'
|
78
|
-
@numbers = opts[:numbers] || 'all'
|
79
|
-
@minimum_length = opts[:minimum_length] || 0
|
80
|
-
@long_word_split = opts[:long_word_split]
|
81
|
-
@mentions = opts[:mentions] || 'keep_original'
|
82
|
-
@hashtags = opts[:hashtags] || 'keep_original'
|
83
|
-
@downcase = opts[:downcase].nil? ? true : opts[:downcase]
|
84
|
-
@clean = opts[:clean] || false
|
85
|
-
@classic_filter = opts[:classic_filter] || false
|
86
|
-
@remove_emoji = opts[:remove_emoji] || false
|
87
|
-
@remove_emails = opts[:remove_emails] || false
|
88
|
-
@remove_urls = opts[:remove_urls] || false
|
89
|
-
@remove_domains = opts[:remove_domains] || false
|
90
136
|
|
91
|
-
unless
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
end
|
97
|
-
unless numbers.to_s.eql?('all') ||
|
98
|
-
numbers.to_s.eql?('semi') ||
|
99
|
-
numbers.to_s.eql?('none') ||
|
100
|
-
numbers.to_s.eql?('only')
|
101
|
-
raise "Numbers argument can be only be nil, 'all', 'semi', 'none', or 'only'"
|
102
|
-
end
|
103
|
-
unless mentions.to_s.eql?('keep_original') ||
|
104
|
-
mentions.to_s.eql?('keep_and_clean') ||
|
105
|
-
mentions.to_s.eql?('remove')
|
106
|
-
raise "Mentions argument can be only be nil, 'keep_original', 'keep_and_clean', or 'remove'"
|
107
|
-
end
|
108
|
-
raise "In Pragmatic Tokenizer text must be a String" unless text.class == String
|
109
|
-
raise "In Pragmatic Tokenizer minimum_length must be an Integer" unless minimum_length.class == Fixnum || minimum_length.nil?
|
110
|
-
raise "In Pragmatic Tokenizer long_word_split must be an Integer" unless long_word_split.class == Fixnum || long_word_split.nil?
|
137
|
+
raise "Punctuation argument can be only be nil, :all, :semi, :none, or :only" unless PUNCTIATION_OPTIONS.include?(@punctuation)
|
138
|
+
raise "Numbers argument can be only be nil, :all, :semi, :none, or :only" unless NUMBERS_OPTIONS.include?(@numbers)
|
139
|
+
raise "Mentions argument can be only be nil, :keep_original, :keep_and_clean, or :remove" unless MENTIONS_OPTIONS.include?(@mentions)
|
140
|
+
raise "In Pragmatic Tokenizer minimum_length must be an Integer" unless @minimum_length.class == Fixnum || @minimum_length.nil?
|
141
|
+
raise "In Pragmatic Tokenizer long_word_split must be an Integer" unless @long_word_split.class == Fixnum || @long_word_split.nil?
|
111
142
|
end
|
112
143
|
|
113
|
-
|
144
|
+
# @param [String] text to be tokenized
|
145
|
+
|
146
|
+
def tokenize(text)
|
114
147
|
return [] unless text
|
115
|
-
text
|
116
|
-
|
117
|
-
.
|
118
|
-
.
|
148
|
+
raise "In Pragmatic Tokenizer text must be a String" unless text.class == String
|
149
|
+
CGI.unescapeHTML(text)
|
150
|
+
.scan(REGEXP_CHUNK_STRING)
|
151
|
+
.flat_map { |segment| post_process(pre_process(segment)) }
|
119
152
|
end
|
120
153
|
|
121
154
|
private
|
@@ -123,171 +156,146 @@ module PragmaticTokenizer
|
|
123
156
|
def pre_process(text)
|
124
157
|
text
|
125
158
|
.extend(PragmaticTokenizer::PreProcessor)
|
126
|
-
.pre_process(language: language_module)
|
159
|
+
.pre_process(language: @language_module)
|
127
160
|
end
|
128
161
|
|
129
162
|
def post_process(text)
|
130
|
-
|
131
|
-
|
132
|
-
else
|
133
|
-
@tokens = PostProcessor.new(text: text, abbreviations: abbreviations, downcase: downcase).post_process
|
134
|
-
end
|
135
|
-
expand_contractions!(contractions) if expand_contractions
|
136
|
-
clean! if clean
|
137
|
-
classic_filter! if classic_filter
|
163
|
+
@tokens = run_post_processor(text)
|
164
|
+
remove_various!
|
138
165
|
process_numbers!
|
139
|
-
remove_short_tokens! if minimum_length > 0
|
140
166
|
process_punctuation!
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
split_long_words!
|
167
|
+
expand_contractions! if @expand_contractions
|
168
|
+
clean! if @clean
|
169
|
+
classic_filter! if @classic_filter
|
170
|
+
remove_short_tokens! if @minimum_length > 0
|
171
|
+
remove_stop_words! if @remove_stop_words
|
172
|
+
mentions! if @mentions
|
173
|
+
hashtags! if @hashtags
|
174
|
+
split_long_words! if @long_word_split
|
149
175
|
@tokens.reject(&:empty?)
|
150
176
|
end
|
151
177
|
|
152
|
-
def
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
.flatten
|
171
|
-
else
|
172
|
-
t
|
173
|
-
end
|
174
|
-
end
|
175
|
-
end
|
178
|
+
def run_post_processor(text)
|
179
|
+
PostProcessor.new(
|
180
|
+
text: chosen_case(text),
|
181
|
+
abbreviations: @abbreviations,
|
182
|
+
downcase: @downcase
|
183
|
+
).post_process
|
184
|
+
end
|
185
|
+
|
186
|
+
def expand_contractions!
|
187
|
+
@tokens = @tokens.flat_map { |t| expand_token_contraction(t) }
|
188
|
+
end
|
189
|
+
|
190
|
+
def expand_token_contraction(token)
|
191
|
+
normalized = inverse_case(token.gsub(REGEX_CONTRACTIONS, "'".freeze))
|
192
|
+
return token unless @contractions.key?(normalized)
|
193
|
+
result = @contractions[normalized].split(SPACE_STRING)
|
194
|
+
result[0] = UnicodeCaseConverter::capitalize(result[0]) unless @downcase
|
195
|
+
result
|
176
196
|
end
|
177
197
|
|
178
198
|
def clean!
|
179
|
-
@tokens = @tokens
|
180
|
-
.flat_map { |t|
|
181
|
-
.
|
182
|
-
.
|
183
|
-
.
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
.map { |t| t.gsub(/\u{00AD}/, '') }
|
192
|
-
.map { |t| t.gsub(/\A(-|–)/, '') }
|
193
|
-
.map { |t| t.gsub(/[®©]/, '') }
|
194
|
-
.map { |t| t.gsub(/\A\%/, '') }
|
195
|
-
.map { |t| t.gsub(/[\u{1F100}-\u{1F1FF}]/, '') }
|
196
|
-
.delete_if do |t|
|
197
|
-
t =~ /\A-+\z/ ||
|
198
|
-
PragmaticTokenizer::Languages::Common::SPECIAL_CHARACTERS.include?(t) ||
|
199
|
-
t =~ /\A\.{2,}\z/ || t.include?("\\") ||
|
200
|
-
t.length > 50 ||
|
201
|
-
(t.length > 1 && t =~ /[&*+<=>^|~]/i) ||
|
202
|
-
(t.length == 1 && t =~ /\:/)
|
203
|
-
end
|
199
|
+
@tokens = @tokens
|
200
|
+
.flat_map { |t| t !~ REGEX_HASHTAG_OR_MENTION ? t.split(REGEX_UNIFIED1) : t }
|
201
|
+
.map! { |t| t !~ REGEX_HASHTAG_OR_MENTION ? t.gsub(REGEXP_ONE_AS_EXCLAMATION, EMPTY_STRING) : t }
|
202
|
+
.map! { |t| t.gsub(REGEX_UNIFIED2, EMPTY_STRING) }
|
203
|
+
.delete_if { |t| unclean_token?(t) }
|
204
|
+
end
|
205
|
+
|
206
|
+
def unclean_token?(token)
|
207
|
+
return true if PragmaticTokenizer::Languages::Common::SPECIAL_CHARACTERS.include?(token)
|
208
|
+
return true if token.length > MAX_TOKEN_LENGTH
|
209
|
+
return true if token.include?('\\'.freeze)
|
210
|
+
token =~ REGEXP_CONSECUTIVE_DOTS
|
204
211
|
end
|
205
212
|
|
206
213
|
def classic_filter!
|
207
|
-
@tokens.map!
|
214
|
+
@tokens.map! do |token|
|
215
|
+
token.delete!(DOT_STRING) if @abbreviations.include?(token.chomp(DOT_STRING))
|
216
|
+
token.sub!(REGEX_APOSTROPHE_S, EMPTY_STRING)
|
217
|
+
token
|
218
|
+
end
|
208
219
|
end
|
209
220
|
|
210
221
|
def process_numbers!
|
211
|
-
case numbers
|
212
|
-
when
|
213
|
-
@tokens.delete_if { |t| t =~
|
214
|
-
when
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
@tokens.delete_if { |t| t =~ /\D*\d+\d*/ || PragmaticTokenizer::Languages::Common::ROMAN_NUMERALS.include?(UnicodeCaseConverter::Converter.new(t).downcase) || PragmaticTokenizer::Languages::Common::ROMAN_NUMERALS.include?("#{UnicodeCaseConverter::Converter.new(t).downcase}.") }
|
219
|
-
end
|
220
|
-
when 'only'
|
221
|
-
@tokens.delete_if { |t| t =~ /\A\D+\z/ }
|
222
|
+
case @numbers
|
223
|
+
when :semi
|
224
|
+
@tokens.delete_if { |t| t =~ REGEXP_NUMBER_ONLY }
|
225
|
+
when :none
|
226
|
+
@tokens.delete_if { |t| t =~ REGEXP_NUMBER || PragmaticTokenizer::Languages::Common::ROMAN_NUMERALS.include?(inverse_case(t)) }
|
227
|
+
when :only
|
228
|
+
@tokens.delete_if { |t| t =~ REGEXP_NO_NUMBERS }
|
222
229
|
end
|
223
230
|
end
|
224
231
|
|
225
232
|
def remove_short_tokens!
|
226
|
-
@tokens.delete_if { |t| t.length < minimum_length }
|
233
|
+
@tokens.delete_if { |t| t.length < @minimum_length }
|
227
234
|
end
|
228
235
|
|
229
236
|
def process_punctuation!
|
230
|
-
case punctuation
|
231
|
-
when
|
232
|
-
@tokens
|
233
|
-
when
|
234
|
-
@tokens
|
235
|
-
when
|
236
|
-
@tokens.
|
237
|
+
case @punctuation
|
238
|
+
when :semi
|
239
|
+
@tokens.delete_if { |t| PragmaticTokenizer::Languages::Common::SEMI_PUNCTUATION.include?(t) }
|
240
|
+
when :none
|
241
|
+
@tokens.delete_if { |t| PragmaticTokenizer::Languages::Common::PUNCTUATION.include?(t) || t =~ REGEXP_PUNCTUATION_ONLY }
|
242
|
+
when :only
|
243
|
+
@tokens.keep_if { |t| PragmaticTokenizer::Languages::Common::PUNCTUATION.include?(t) }
|
237
244
|
end
|
238
245
|
end
|
239
246
|
|
240
|
-
def remove_stop_words!
|
241
|
-
|
242
|
-
@tokens -= stop_words
|
243
|
-
else
|
244
|
-
@tokens.delete_if { |t| stop_words.include?(UnicodeCaseConverter::Converter.new(t).downcase) }
|
245
|
-
end
|
247
|
+
def remove_stop_words!
|
248
|
+
@tokens.delete_if { |token| @stop_words.include?(inverse_case(token)) }
|
246
249
|
end
|
247
250
|
|
248
|
-
def
|
249
|
-
@
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
251
|
+
def mentions!
|
252
|
+
case @mentions
|
253
|
+
when :remove
|
254
|
+
@tokens.delete_if { |t| t =~ REGEXP_AT_SIGN_AT_START }
|
255
|
+
when :keep_and_clean
|
256
|
+
@tokens.map! { |t| t =~ REGEXP_AT_SIGN_AT_START ? t.gsub!(REGEXP_AT_SIGN_AT_START, EMPTY_STRING) : t }
|
254
257
|
end
|
255
258
|
end
|
256
259
|
|
257
|
-
def
|
258
|
-
@
|
260
|
+
def hashtags!
|
261
|
+
case @hashtags
|
262
|
+
when :remove
|
263
|
+
@tokens.delete_if { |t| t =~ REGEXP_HASHTAG_AT_START }
|
264
|
+
when :keep_and_clean
|
265
|
+
@tokens = @tokens
|
266
|
+
.flat_map { |t| t =~ REGEXP_HYPHEN_HASTAG ? t.split(REGEX_HYPHEN) : t }
|
267
|
+
.map { |t| t =~ REGEXP_HASHTAG_AT_START ? t.gsub!(REGEXP_HASHTAG_AT_START, EMPTY_STRING) : t }
|
268
|
+
end
|
259
269
|
end
|
260
270
|
|
261
|
-
def
|
262
|
-
|
263
|
-
when 'remove'
|
264
|
-
@tokens.delete_if { |t| t =~ /\A(@|@)/ }
|
265
|
-
when 'keep_and_clean'
|
266
|
-
@tokens.map! { |t| t =~ /\A(@|@)/ ? t.gsub!(/(?<=\A)(@|@)/, '') : t }
|
267
|
-
end
|
271
|
+
def remove_various!
|
272
|
+
@tokens.delete_if { |t| t =~ regex_various }
|
268
273
|
end
|
269
274
|
|
270
|
-
def
|
271
|
-
|
272
|
-
|
273
|
-
|
274
|
-
|
275
|
-
|
276
|
-
|
275
|
+
def regex_various
|
276
|
+
@regex_various ||= begin
|
277
|
+
regex_array = []
|
278
|
+
regex_array << REGEX_EMOJI_UNIFIED if @remove_emoji
|
279
|
+
regex_array << REGEX_EMAIL if @remove_emails
|
280
|
+
regex_array << REGEX_URL if @remove_urls
|
281
|
+
regex_array << REGEX_DOMAIN if @remove_domains
|
282
|
+
Regexp.union(regex_array)
|
277
283
|
end
|
278
284
|
end
|
279
285
|
|
280
|
-
def
|
281
|
-
@tokens
|
286
|
+
def split_long_words!
|
287
|
+
@tokens = @tokens
|
288
|
+
.flat_map { |t| t.length > @long_word_split ? t.split(REGEX_HYPHEN) : t }
|
289
|
+
.flat_map { |t| t.length > @long_word_split ? t.split(REGEX_UNDERSCORE) : t }
|
282
290
|
end
|
283
291
|
|
284
|
-
def
|
285
|
-
@
|
292
|
+
def chosen_case(token)
|
293
|
+
@downcase ? UnicodeCaseConverter::downcase(token) : token
|
286
294
|
end
|
287
295
|
|
288
|
-
def
|
289
|
-
@
|
290
|
-
.map! { |t| t.length > long_word_split ? t.gsub(/\_/, '\1 \2').split(' ').flatten : t }
|
296
|
+
def inverse_case(token)
|
297
|
+
@downcase ? token : UnicodeCaseConverter::downcase(token)
|
291
298
|
end
|
299
|
+
|
292
300
|
end
|
293
|
-
end
|
301
|
+
end
|