%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import sys
from sklearn.datasets import load_files
from sklearn.cross_validation import train_test_split
dataset = load_files('language/paragraphs')
docs_train, docs_test, y_train, y_test = train_test_split(
dataset.data, dataset.target, test_size=0.5, random_state=0)
for example, lang_code in list(zip(docs_train, y_train))[:3]:
print(example.decode('utf-8'))
print("=> %s\n" % dataset.target_names[lang_code])
In 2005 publiceerde het natuurwetenschappelijke tijdschrift Nature de resultaten van een vergelijkend onderzoek naar de kwaliteit van artikelen in de Engelse Wikipedia (WP) en de Encyclopædia Britannica.[18] Universitaire deskundigen bogen zich over natuurwetenschappelijke teksten, zonder te weten uit welke encyclopedie ze kwamen. In 42 paren van overeenkomstige artikelen uit beide encyclopedieën vonden ze zowel in WP als in EB totaal acht ernstige fouten. Gemiddeld bevatte een WP-artikel vier en een EB-artikel drie foutjes, weglatingen of misleidende beweringen. Nature concludeerde dat hoewel de schrijfstijl van de Brittanica veel beter was, de Wikipedia op natuurwetenschappelijk gebied bijna net zo goed was als de Britannica. Orlowski formuleerde het als volgt: de kwaliteit van informatie in deze artikelen was in Wikipedia daarmee 31 procent minder dan in de Britannica.[19] Het betrof hier een betrekkelijk kleine selectie van artikelen over exacte wetenschappen en techniek, en veel van de aangetroffen 'fouten' betroffen meningsverschillen tussen de onderzoekers van Nature en de redacteuren van de Britannica over welke feiten vermeld zouden moeten worden in een encyclopedie.[20] In maart 2006 publiceerde de Encyclopædia Britannica onder de titel "Fatally Flawed" een weerlegging van de onderzoeksresultaten van Nature.[21] => nl Il existe également un classement qualitatif fondé sur l'existence et la taille des articles d'une liste arbitraire d'environ 1 000 articles que toute édition de Wikipédia devrait avoir[note 18]. => fr On January 18, 2012, the English Wikipedia participated in a series of coordinated protests against two proposed laws in the United States Congress—the Stop Online Piracy Act (SOPA) and the PROTECT IP Act (PIPA)—by blacking out its pages for 24 hours.[144] More than 162 million people viewed the blackout explanation page that temporarily replaced Wikipedia content.[145][146] => en
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.linear_model import Perceptron
from sklearn.pipeline import make_pipeline
vectorizer = TfidfVectorizer(ngram_range=(1, 3), analyzer='char',
use_idf=False)
clf = make_pipeline(vectorizer, Perceptron())
clf.fit(docs_train, y_train);
sentences = [
"This is a language detection test.",
"Ceci est un test de détection de la langue.",
"Das ist eine Spracherkennungstest.",
"Je suis au Sénat pour présenter l'analyse prédictive de données."
]
predicted = clf.predict(sentences)
for s, p in zip(sentences, predicted):
print(u'The language of "%s" is "%s"' % (s, dataset.target_names[p]))
The language of "This is a language detection test." is "en" The language of "Ceci est un test de détection de la langue." is "fr" The language of "Das ist eine Spracherkennungstest." is "de" The language of "Je suis au Sénat pour présenter l'analyse prédictive de données." is "fr"
from sklearn.metrics import classification_report
y_predicted = clf.predict(docs_test)
print(classification_report(y_test, y_predicted,
target_names=dataset.target_names))
precision recall f1-score support ar 1.00 1.00 1.00 14 de 0.98 1.00 0.99 47 en 1.00 1.00 1.00 77 es 1.00 1.00 1.00 45 fr 1.00 0.98 0.99 59 it 0.98 1.00 0.99 45 ja 1.00 0.97 0.99 35 nl 1.00 1.00 1.00 18 pl 1.00 0.95 0.97 20 pt 0.98 1.00 0.99 47 ru 1.00 1.00 1.00 26 avg / total 0.99 0.99 0.99 433
from sklearn.decomposition import TruncatedSVD
from itertools import cycle
X_train = vectorizer.fit_transform(docs_train)
X_pca = TruncatedSVD(50).fit_transform(X_train)
for i, c in zip(np.unique(y_train)[:5],
cycle(['r', 'g', 'b', 'c', 'm', 'y'])):
mask = y_train == i
language = dataset.target_names[i]
plt.scatter(X_pca[mask, 0], X_pca[mask, 1], color=c, label=language)
plt.legend(loc='best');