Вокруг я вижу этот пример, связанный с упаковкой LanguageDetector
import spacy
from spacy.language import Language
from spacy_langdetect import LanguageDetector
def get_lang_detector(nlp, name):
return LanguageDetector()
nlp = spacy.load("en_core_web_sm")
Language.factory("language_detector", func=get_lang_detector)
nlp.add_pipe('language_detector', last=True)
text = 'This is an english text.'
doc = nlp(text)
print(doc._.language)
Но как мне загрузить правильный языковой модуль в соответствии с обнаруженным языком, если предыдущий код всегда загружает только английский модуль?
Я хочу что-то вроде
languageCode = LanguageDetector.detect('This is a text example')
nlp = spacy.load(languageCode.lower() + "_core_web_sm")
Если вы не ограничены использованием только spacy
, вы можете использовать библиотеку lingua-language-detector
, чтобы сначала получить сам язык.
Здесь вы можете найти полный список всех доступных языков на SpaCy. Таким образом, вы можете создать словарь следующим образом (включая столько языков, сколько захотите):
spacy_model_mapping = {
"english": "en_core_web_sm",
"french": "fr_core_web_sm",
"german": "de_core_web_sm",
"spanish": "es_core_web_sm",
"portuguese": "pt_core_news_sm",
"italian": "it_core_news_sm",
"dutch": "nl_core_news_sm",
}
Действуем следующим образом:
import spacy
from lingua import Language, LanguageDetectorBuilder
# Languages
supported_languages = [Language.ENGLISH, Language.FRENCH, Language.GERMAN, Language.SPANISH, Language.PORTUGUESE, Language.ITALIAN, Language.DUTCH]
detector = LanguageDetectorBuilder.from_languages(*supported_languages).build()
text = "Ceci est un texte en français."
result = detector.detect_language_of(text)
detected_language_name = result.name.lower()
spacy_model_name = spacy_model_mapping.get(detected_language_name)
print("SpaCy model name:", spacy_model_name)
Получение:
>>> SpaCy model name: fr_core_web_sm
И в итоге:
nlp = spacy.load(spacy_model_name)
если в вашей среде уже установлены модели, возможно, вы можете попытаться перечислить все модели с помощью кода типа: import spacy spacy.info()['pipelines'].keys() Затем проверьте первые два символа язык. «_core_web_sm» связано с языком, поэтому я не уверен, что вы можете найти такое же окончание в названии модели.