Хороший подход - сравнить частоту появления данного слова в корпусе английских документов с частотой появления этого же слова в корпусе немецких документов.
Например, если слово w1 встречается чащев немецкой википедии, чем в английской википедии, тогда это, вероятно, немецкое слово.
Теперь вместо загрузки, анализа и вычисления частот слов для этих двух версий википедии более простым подходом является использование моделей. которые были предварительно обучены и которые содержат указание частот слов, с которыми они столкнулись во время обучения.
Мы можем использовать английскую и немецкую модель в Spacy:
import spacy
nlpDE = spacy.load("de_core_news_md")
nlpEN = spacy.load('en_core_web_md')
# some test sentences in both languages:
sl = [ "Python is an interpreted, high-level, general-purpose programming language.",
"Created by Guido van Rossum and first released in 1991, Python's design philosophy emphasizes code readability with its notable use of significant whitespace.",
"Its language constructs and object-oriented approach aim to help programmers write clear, logical code for small and large-scale projects.",
"Python ist eine universelle, üblicherweise interpretierte höhere Programmiersprache.",
" Wegen ihrer klaren und übersichtlichen Syntax gilt Python als einfach zu erlernen.",
"Python unterstützt mehrere Programmierparadigmen, z. B. die objektorientierte, die aspektorientierte und die funktionale Programmierung"]
#let's randomly shuffle this list of test sentences:
from random import shuffle
shuffle(sl)
s = " ".join(sl)
#Our function which will compare the likelihoods:
def compare(word):
prob_en = nlpEN.vocab[word].prob
prob_de = nlpDE.vocab[word].prob
if prob_en > prob_de:
return('EN')
else:
return('DE')
doc = nlpEN(s)
print([(t, compare(t.text)) for t in doc if not t.is_punct])
ИРезультат этого метода на данных выборки:
[(Python, 'EN'), (is, 'EN'), (an, 'DE'), (interpreted, 'EN'), (high, 'EN'), (level, 'EN'),
(general, 'EN'), (purpose, 'EN'), (programming, 'EN'), (language, 'EN'), (Python, 'EN'),
(unterstützt, 'DE'), (mehrere, 'DE'), (Programmierparadigmen, 'DE'), (z., 'DE'), (B., 'DE'), (die, 'DE'),
(objektorientierte, 'DE'), (die, 'DE'), (aspektorientierte, 'DE'), (und, 'DE'), (die, 'DE'), (funktionale, 'DE'),
(Programmierung, 'DE'), (Created, 'EN'), (by, 'EN'), (Guido, 'DE'), (van, 'DE'), (Rossum, 'DE'), (and, 'EN'),
(first, 'EN'), (released, 'EN'), (in, 'DE'), (1991, 'EN'), (Python, 'EN'), ('s, 'EN'), (design, 'EN'),
(philosophy, 'EN'), (emphasizes, 'EN'), (code, 'EN'), (readability, 'EN'), (with, 'EN'), (its, 'EN'),
(notable, 'EN'), (use, 'EN'), (of, 'EN'), (significant, 'EN'), (whitespace, 'EN'), ( , 'EN'), (Wegen, 'DE'),
(ihrer, 'DE'), (klaren, 'DE'), (und, 'DE'), (übersichtlichen, 'DE'), (Syntax, 'DE'), (gilt, 'DE'), (Python, 'EN'),
(als, 'DE'), (einfach, 'DE'), (zu, 'DE'), (erlernen, 'DE'), (Python, 'EN'), (ist, 'DE'), (eine, 'DE'),
(universelle, 'DE'), (üblicherweise, 'DE'), (interpretierte, 'DE'), (höhere, 'DE'), (Programmiersprache, 'DE'),
(Its, 'EN'), (language, 'EN'), (constructs, 'EN'), (and, 'EN'), (object, 'EN'), (oriented, 'EN'), (approach, 'EN'),
(aim, 'EN'), (to, 'EN'), (help, 'EN'), (programmers, 'EN'), (write, 'EN'), (clear, 'EN'), (logical, 'EN'),
(code, 'EN'), (for, 'EN'), (small, 'EN'), (and, 'EN'), (large, 'EN'), (scale, 'EN'), (projects, 'EN')]