Библиотека для определения языка текста без внешних зависимостей. Поддерживает различные славянские языки и английский язык.
- Встроенная поддержка русского, украинского, белорусского, польского и английского языков
- Возможность добавления собственных языков
- Подробный анализ текста с метриками
- Простой и удобный API
- Высокая скорость работы
- Не требует подключения к интернету
# Клонирование репозитория
git clone https://github.com/HackerMan33106/LangDefLib.git
cd LangDefLibfrom LangDefLib import LangDetector, detect_language
# Быстрое определение языка
result = detect_language("Это пример текста на русском языке")
print(result) # {'language': 'russian', 'confidence': 0.95}
# Создание детектора для всех поддерживаемых языков
detector = LangDetector(languages=['russian', 'ukrainian', 'belarusian', 'english', 'polish'])
# Определение языка с использованием детектора
result = detector.detect("This is an example text in English")
print(result) # {'language': 'english', 'confidence': 0.99}
# Получение подробного анализа
analysis = detector.analyze("Це приклад тексту українською мовою")
print(analysis)Основной класс для определения языка текста.
detector = LangDetector(
languages=['russian', 'ukrainian'], # Список языков для определения
data_dir='path/to/data', # Директория с данными языков (опционально)
min_confidence=0.6 # Минимальный порог уверенности (опционально)
)Определяет язык текста.
result = detector.detect("Это пример текста на русском языке")
print(result) # {'language': 'russian', 'confidence': 0.95}Определяет язык текста из файла.
result = detector.detect_from_file("path/to/text/file.txt")
print(result) # {'language': 'russian', 'confidence': 0.95}Проводит подробный анализ текста.
analysis = detector.analyze("Це приклад тексту українською мовою")
print(analysis)Результат содержит:
- Определенный язык
- Уверенность определения
- Статистику текста (длина, количество слов и т.д.)
- Подробные метрики по каждому языку
- Топ наиболее вероятных языков
Добавляет новый язык для определения.
detector.add_language('german', {
'unique_letters': ['ä', 'ö', 'ü', 'ß'],
'frequent_letters': ['ä', 'ö', 'ü', 'ß'],
'word_endings': ['en', 'er', 'ung', 'ich', 'lich', 'ig', 'keit', 'heit', 'schaft'],
'marker_words': ['und', 'oder', 'aber', 'der', 'die', 'das', 'in', 'mit', 'für', 'von', 'zu'],
'digrams': ['ch', 'ck', 'ei', 'ie', 'sch', 'st', 'th'],
'trigrams': ['sch', 'che', 'ein', 'ich', 'und', 'den'],
'alphabet': 'abcdefghijklmnopqrstuvwxyzäöüß'
})Удаляет язык из списка определения.
detector.remove_language('polish')Создает JSON-файл с данными о языке.
detector.create_language_data_file('german', german_data, 'path/to/data')Для быстрого определения языка без создания экземпляра класса.
from LangDefLib import detect_language
result = detect_language("This is a simple English text", languages=['english', 'russian'])
print(result) # {'language': 'english', 'confidence': 0.99}По умолчанию библиотека поддерживает следующие языки:
- Русский
- Украинский
- Белорусский
- Английский
- Польский
Для добавления нового языка создайте словарь с данными о языке:
german_data = {
'unique_letters': ['ä', 'ö', 'ü', 'ß'],
'frequent_letters': ['ä', 'ö', 'ü', 'ß'],
'word_endings': ['en', 'er', 'ung', 'ich', 'lich', 'ig', 'keit', 'heit', 'schaft'],
'marker_words': ['und', 'oder', 'aber', 'der', 'die', 'das', 'in', 'mit', 'für', 'von', 'zu'],
'digrams': ['ch', 'ck', 'ei', 'ie', 'sch', 'st', 'th'],
'trigrams': ['sch', 'che', 'ein', 'ich', 'und', 'den'],
'alphabet': 'abcdefghijklmnopqrstuvwxyzäöüß',
'weights': {
'unique_letters': 2.0,
'frequent_letters': 1.0,
'word_endings': 1.5,
'marker_words': 3.0,
'digrams': 1.0,
'trigrams': 1.2
}
}
detector.add_language('german', german_data)Вы также можете сохранить данные в JSON-файл:
detector.create_language_data_file('german', german_data)MIT
Библиотека также поддерживает интеграцию с внешними библиотеками определения языка:
- fastText - высокоточная библиотека от Facebook (поддерживает 176 языков)
- langdetect - простая и легкая библиотека (поддерживает 55+ языков)
# Установка только основной библиотеки
pip install -e .
# Установка с поддержкой fastText
pip install -e ".[fasttext]"
# Установка с поддержкой langdetect
pip install -e ".[langdetect]"
# Установка с поддержкой всех внешних библиотек
pip install -e ".[all]"Для работы с fastText необходимо указать путь к предварительно обученной модели. Вот пример использования:
from LangDefLib import ExternalDetector
# Использование детектора с указанием пути к модели
detector = ExternalDetector(fasttext_model_path = r'D:\All_Python\LangDefLib\model\lid.176.bin')
# Пример использования
text = "Привет, мир!"
fasttext_result = detector.detect(text, method='fasttext')
langdetect_result = detector.detect(text, method='langdetect')
print(f"FastText: {fasttext_result['language']}")
print(f"LangDetect: {langdetect_result['language']}")Важные замечания:
- Используйте префикс
rперед строкой пути для Windows, чтобы избежать проблем с обратными слешами - Убедитесь, что файл модели существует по указанному пути
- Поддерживаются форматы моделей:
.bin(большая модель) и.ftz(маленькая модель)
fastText требует предварительно обученную модель для определения языка. Доступны две модели:
- Маленькая (917 КБ): lid.176.ftz
- Большая (126 МБ): lid.176.bin
Скачайте нужную модель и укажите путь к ней при создании детектора:
# Скачиваем модель
# wget https://dl.fbaipublicfiles.com/fasttext/supervised-models/lid.176.ftz
from LangDefLib import ExternalDetector, detect_language_external, get_language
# Создание детектора с указанием пути к модели
detector = ExternalDetector(fasttext_model_path='./lid.176.ftz')
# Быстрое определение языка с помощью fastText
result = detector.detect("Это пример текста", method='fasttext')
print(result) # {'language': 'ru', 'confidence': 0.92, 'method': 'fasttext'}
# Получение только кода языка
lang = detector.get_language("This is an example text")
print(lang) # 'en'
# Использование вспомогательной функции
lang = get_language("This is an example text", fasttext_model_path='./lid.176.ftz')
print(lang) # 'en'Можно использовать разные методы определения языка и сравнивать их результаты:
from LangDefLib import ExternalDetector
# Создание детектора с указанием пути к модели
detector = ExternalDetector(fasttext_model_path='./lid.176.bin')
text = "Привет, мир!"
# Определение языка с использованием всех методов
results = detector.detect_with_all_methods(text)
# Результаты всех методов
if 'fasttext' in results:
print(f"fastText: {results['fasttext']}")
if 'langdetect' in results:
print(f"langdetect: {results['langdetect']}")
# Лучший метод
print(f"Лучший метод: {results['best_method']} -> {results['best']['language']}")
# Определение языка с использованием fastText
result = detector.detect(text, method='fasttext')
print(f"Язык (fastText): {result['language']}")
print(f"Уверенность (fastText): {result['confidence']}")
# Определение языка с использованием голосования
vote_result = detector.detect(text, method='vote')
print(f"Язык (голосование): {vote_result['language']}")
print(f"Уверенность (голосование): {vote_result['confidence']}")