Given a snippet of text in English, French, German, or Spanish, detect the snippet's language and print the language name. You may build an offline model for this. The snippet may contain one or more lines.
The snippet will not exceed 3 kilobytes in size.The snippet will not exceed 3 kilobytes in size. The snippet will be in one of the following languages: English, French, German, or Spanish.
In [ ]:
# #Python Library Imports
import nltk
from nltk import wordpunct_tokenize
from nltk.corpus import stopwords
In [16]:
lang_input = "The story of Rip Van Winkle is set in the years before and after the American Revolutionary War. In a pleasant village, at the foot of New York's Catskill Mountains, lives kindly Rip Van Winkle, a Dutch villager. Van Winkle enjoys solitary activities in the wilderness, but he is also loved by all in town—especially the children to whom he tells stories and gives toys. However, he tends to shirk hard work, to his nagging wife's dismay, which has caused his home and farm to fall into disarray. One autumn day, to escape his wife's nagging, Van Winkle wanders up the mountains with his dog, Wolf. Hearing his name called out, Rip sees a man wearing antiquated Dutch clothing; he is carrying a keg up the mountain and requires help."
In [17]:
lang_input
Out[17]:
In [19]:
# #Tokenize the input text
wordpunct_tokenize(lang_input)
Out[19]:
In [29]:
# #Stopwords in differnt languages
stopwords.fileids()
Out[29]:
In [32]:
stopwords.words('english')[1:5]
Out[32]:
In [33]:
stopwords.words('french')[1:5]
Out[33]:
In [37]:
lang_input_tokenize = wordpunct_tokenize(lang_input)
lang_input_tokenize_lower = [word.lower() for word in lang_input_tokenize]
languages_ratios = {}
for language in stopwords.fileids():
# #SET of stopwords for a particular language
stopwords_set = set(stopwords.words(language))
# #SET of stopwords in the input language
lang_input_tokenize_lower_set = set(lang_input_tokenize_lower)
# #INTERSECTION between the two SETs
common_elements = lang_input_tokenize_lower_set.intersection(stopwords_set)
# #Greatest Probability - Language
languages_ratios[language] = len(common_elements)
In [38]:
languages_ratios
Out[38]:
In [40]:
max(languages_ratios.iterkeys(), key=lambda k: languages_ratios[k])
Out[40]:
In [ ]:
In [ ]:
In [41]:
stopwords.words("english")
Out[41]:
In [43]:
dict_stopwords = {}
arr_languages = ["english", "french", "german", "spanish"]
for var_lang in arr_languages:
dict_stopwords[var_lang] = stopwords.words(var_lang)
In [44]:
print dict_stopwords
In [54]:
lang_input_tokenize = wordpunct_tokenize(lang_input)
lang_input_tokenize_lower = [word.lower() for word in lang_input_tokenize]
languages_ratios = {}
dict_stopwords_1 = {'german': [u'aber', u'alle', u'allem', u'allen', u'aller', u'alles', u'als', u'also', u'am', u'an', u'ander', u'andere', u'anderem', u'anderen', u'anderer', u'anderes', u'anderm', u'andern', u'anderr', u'anders', u'auch', u'auf', u'aus', u'bei', u'bin', u'bis', u'bist', u'da', u'damit', u'dann', u'der', u'den', u'des', u'dem', u'die', u'das', u'da\xdf', u'derselbe', u'derselben', u'denselben', u'desselben', u'demselben', u'dieselbe', u'dieselben', u'dasselbe', u'dazu', u'dein', u'deine', u'deinem', u'deinen', u'deiner', u'deines', u'denn', u'derer', u'dessen', u'dich', u'dir', u'du', u'dies', u'diese', u'diesem', u'diesen', u'dieser', u'dieses', u'doch', u'dort', u'durch', u'ein', u'eine', u'einem', u'einen', u'einer', u'eines', u'einig', u'einige', u'einigem', u'einigen', u'einiger', u'einiges', u'einmal', u'er', u'ihn', u'ihm', u'es', u'etwas', u'euer', u'eure', u'eurem', u'euren', u'eurer', u'eures', u'f\xfcr', u'gegen', u'gewesen', u'hab', u'habe', u'haben', u'hat', u'hatte', u'hatten', u'hier', u'hin', u'hinter', u'ich', u'mich', u'mir', u'ihr', u'ihre', u'ihrem', u'ihren', u'ihrer', u'ihres', u'euch', u'im', u'in', u'indem', u'ins', u'ist', u'jede', u'jedem', u'jeden', u'jeder', u'jedes', u'jene', u'jenem', u'jenen', u'jener', u'jenes', u'jetzt', u'kann', u'kein', u'keine', u'keinem', u'keinen', u'keiner', u'keines', u'k\xf6nnen', u'k\xf6nnte', u'machen', u'man', u'manche', u'manchem', u'manchen', u'mancher', u'manches', u'mein', u'meine', u'meinem', u'meinen', u'meiner', u'meines', u'mit', u'muss', u'musste', u'nach', u'nicht', u'nichts', u'noch', u'nun', u'nur', u'ob', u'oder', u'ohne', u'sehr', u'sein', u'seine', u'seinem', u'seinen', u'seiner', u'seines', u'selbst', u'sich', u'sie', u'ihnen', u'sind', u'so', u'solche', u'solchem', u'solchen', u'solcher', u'solches', u'soll', u'sollte', u'sondern', u'sonst', u'\xfcber', u'um', u'und', u'uns', u'unse', u'unsem', u'unsen', u'unser', u'unses', u'unter', u'viel', u'vom', u'von', u'vor', u'w\xe4hrend', u'war', u'waren', u'warst', u'was', u'weg', u'weil', u'weiter', u'welche', u'welchem', u'welchen', u'welcher', u'welches', u'wenn', u'werde', u'werden', u'wie', u'wieder', u'will', u'wir', u'wird', u'wirst', u'wo', u'wollen', u'wollte', u'w\xfcrde', u'w\xfcrden', u'zu', u'zum', u'zur', u'zwar', u'zwischen'], 'spanish': [u'de', u'la', u'que', u'el', u'en', u'y', u'a', u'los', u'del', u'se', u'las', u'por', u'un', u'para', u'con', u'no', u'una', u'su', u'al', u'lo', u'como', u'm\xe1s', u'pero', u'sus', u'le', u'ya', u'o', u'este', u's\xed', u'porque', u'esta', u'entre', u'cuando', u'muy', u'sin', u'sobre', u'tambi\xe9n', u'me', u'hasta', u'hay', u'donde', u'quien', u'desde', u'todo', u'nos', u'durante', u'todos', u'uno', u'les', u'ni', u'contra', u'otros', u'ese', u'eso', u'ante', u'ellos', u'e', u'esto', u'm\xed', u'antes', u'algunos', u'qu\xe9', u'unos', u'yo', u'otro', u'otras', u'otra', u'\xe9l', u'tanto', u'esa', u'estos', u'mucho', u'quienes', u'nada', u'muchos', u'cual', u'poco', u'ella', u'estar', u'estas', u'algunas', u'algo', u'nosotros', u'mi', u'mis', u't\xfa', u'te', u'ti', u'tu', u'tus', u'ellas', u'nosotras', u'vosostros', u'vosostras', u'os', u'm\xedo', u'm\xeda', u'm\xedos', u'm\xedas', u'tuyo', u'tuya', u'tuyos', u'tuyas', u'suyo', u'suya', u'suyos', u'suyas', u'nuestro', u'nuestra', u'nuestros', u'nuestras', u'vuestro', u'vuestra', u'vuestros', u'vuestras', u'esos', u'esas', u'estoy', u'est\xe1s', u'est\xe1', u'estamos', u'est\xe1is', u'est\xe1n', u'est\xe9', u'est\xe9s', u'estemos', u'est\xe9is', u'est\xe9n', u'estar\xe9', u'estar\xe1s', u'estar\xe1', u'estaremos', u'estar\xe9is', u'estar\xe1n', u'estar\xeda', u'estar\xedas', u'estar\xedamos', u'estar\xedais', u'estar\xedan', u'estaba', u'estabas', u'est\xe1bamos', u'estabais', u'estaban', u'estuve', u'estuviste', u'estuvo', u'estuvimos', u'estuvisteis', u'estuvieron', u'estuviera', u'estuvieras', u'estuvi\xe9ramos', u'estuvierais', u'estuvieran', u'estuviese', u'estuvieses', u'estuvi\xe9semos', u'estuvieseis', u'estuviesen', u'estando', u'estado', u'estada', u'estados', u'estadas', u'estad', u'he', u'has', u'ha', u'hemos', u'hab\xe9is', u'han', u'haya', u'hayas', u'hayamos', u'hay\xe1is', u'hayan', u'habr\xe9', u'habr\xe1s', u'habr\xe1', u'habremos', u'habr\xe9is', u'habr\xe1n', u'habr\xeda', u'habr\xedas', u'habr\xedamos', u'habr\xedais', u'habr\xedan', u'hab\xeda', u'hab\xedas', u'hab\xedamos', u'hab\xedais', u'hab\xedan', u'hube', u'hubiste', u'hubo', u'hubimos', u'hubisteis', u'hubieron', u'hubiera', u'hubieras', u'hubi\xe9ramos', u'hubierais', u'hubieran', u'hubiese', u'hubieses', u'hubi\xe9semos', u'hubieseis', u'hubiesen', u'habiendo', u'habido', u'habida', u'habidos', u'habidas', u'soy', u'eres', u'es', u'somos', u'sois', u'son', u'sea', u'seas', u'seamos', u'se\xe1is', u'sean', u'ser\xe9', u'ser\xe1s', u'ser\xe1', u'seremos', u'ser\xe9is', u'ser\xe1n', u'ser\xeda', u'ser\xedas', u'ser\xedamos', u'ser\xedais', u'ser\xedan', u'era', u'eras', u'\xe9ramos', u'erais', u'eran', u'fui', u'fuiste', u'fue', u'fuimos', u'fuisteis', u'fueron', u'fuera', u'fueras', u'fu\xe9ramos', u'fuerais', u'fueran', u'fuese', u'fueses', u'fu\xe9semos', u'fueseis', u'fuesen', u'sintiendo', u'sentido', u'sentida', u'sentidos', u'sentidas', u'siente', u'sentid', u'tengo', u'tienes', u'tiene', u'tenemos', u'ten\xe9is', u'tienen', u'tenga', u'tengas', u'tengamos', u'teng\xe1is', u'tengan', u'tendr\xe9', u'tendr\xe1s', u'tendr\xe1', u'tendremos', u'tendr\xe9is', u'tendr\xe1n', u'tendr\xeda', u'tendr\xedas', u'tendr\xedamos', u'tendr\xedais', u'tendr\xedan', u'ten\xeda', u'ten\xedas', u'ten\xedamos', u'ten\xedais', u'ten\xedan', u'tuve', u'tuviste', u'tuvo', u'tuvimos', u'tuvisteis', u'tuvieron', u'tuviera', u'tuvieras', u'tuvi\xe9ramos', u'tuvierais', u'tuvieran', u'tuviese', u'tuvieses', u'tuvi\xe9semos', u'tuvieseis', u'tuviesen', u'teniendo', u'tenido', u'tenida', u'tenidos', u'tenidas', u'tened'], 'french': [u'au', u'aux', u'avec', u'ce', u'ces', u'dans', u'de', u'des', u'du', u'elle', u'en', u'et', u'eux', u'il', u'je', u'la', u'le', u'leur', u'lui', u'ma', u'mais', u'me', u'm\xeame', u'mes', u'moi', u'mon', u'ne', u'nos', u'notre', u'nous', u'on', u'ou', u'par', u'pas', u'pour', u'qu', u'que', u'qui', u'sa', u'se', u'ses', u'son', u'sur', u'ta', u'te', u'tes', u'toi', u'ton', u'tu', u'un', u'une', u'vos', u'votre', u'vous', u'c', u'd', u'j', u'l', u'\xe0', u'm', u'n', u's', u't', u'y', u'\xe9t\xe9', u'\xe9t\xe9e', u'\xe9t\xe9es', u'\xe9t\xe9s', u'\xe9tant', u'\xe9tante', u'\xe9tants', u'\xe9tantes', u'suis', u'es', u'est', u'sommes', u'\xeates', u'sont', u'serai', u'seras', u'sera', u'serons', u'serez', u'seront', u'serais', u'serait', u'serions', u'seriez', u'seraient', u'\xe9tais', u'\xe9tait', u'\xe9tions', u'\xe9tiez', u'\xe9taient', u'fus', u'fut', u'f\xfbmes', u'f\xfbtes', u'furent', u'sois', u'soit', u'soyons', u'soyez', u'soient', u'fusse', u'fusses', u'f\xfbt', u'fussions', u'fussiez', u'fussent', u'ayant', u'ayante', u'ayantes', u'ayants', u'eu', u'eue', u'eues', u'eus', u'ai', u'as', u'avons', u'avez', u'ont', u'aurai', u'auras', u'aura', u'aurons', u'aurez', u'auront', u'aurais', u'aurait', u'aurions', u'auriez', u'auraient', u'avais', u'avait', u'avions', u'aviez', u'avaient', u'eut', u'e\xfbmes', u'e\xfbtes', u'eurent', u'aie', u'aies', u'ait', u'ayons', u'ayez', u'aient', u'eusse', u'eusses', u'e\xfbt', u'eussions', u'eussiez', u'eussent'], 'english': [u'i', u'me', u'my', u'myself', u'we', u'our', u'ours', u'ourselves', u'you', u'your', u'yours', u'yourself', u'yourselves', u'he', u'him', u'his', u'himself', u'she', u'her', u'hers', u'herself', u'it', u'its', u'itself', u'they', u'them', u'their', u'theirs', u'themselves', u'what', u'which', u'who', u'whom', u'this', u'that', u'these', u'those', u'am', u'is', u'are', u'was', u'were', u'be', u'been', u'being', u'have', u'has', u'had', u'having', u'do', u'does', u'did', u'doing', u'a', u'an', u'the', u'and', u'but', u'if', u'or', u'because', u'as', u'until', u'while', u'of', u'at', u'by', u'for', u'with', u'about', u'against', u'between', u'into', u'through', u'during', u'before', u'after', u'above', u'below', u'to', u'from', u'up', u'down', u'in', u'out', u'on', u'off', u'over', u'under', u'again', u'further', u'then', u'once', u'here', u'there', u'when', u'where', u'why', u'how', u'all', u'any', u'both', u'each', u'few', u'more', u'most', u'other', u'some', u'such', u'no', u'nor', u'not', u'only', u'own', u'same', u'so', u'than', u'too', u'very', u's', u't', u'can', u'will', u'just', u'don', u'should', u'now']}
for var_lang in dict_stopwords_1.iterkeys():
# #SET of stopwords for a particular language
stopwords_set = set(dict_stopwords[var_lang])
# #SET of stopwords in the input language
lang_input_tokenize_lower_set = set(lang_input_tokenize_lower)
# #INTERSECTION between the two SETs
common_elements = lang_input_tokenize_lower_set.intersection(stopwords_set)
# #Greatest Probability - Language
languages_ratios[var_lang] = len(common_elements)
print max(languages_ratios.iterkeys(), key=lambda k: languages_ratios[k]).capitalize()
In [ ]: