"结巴" — китайская библиотека для сегментации текста на слова на языке Python: лучшая библиотека для китайской сегментации слов.
Поддерживает три режима сегментации:
Поддержка сегментации традиционного китайского языка
Поддержка пользовательских словарей
http://jiebademo.ap01.aws.af.cm/
(Поддерживается Appfog)
easy_install jieba
или pip install jieba
python setup.py install
import jieba
Алгоритмы
========
* Реализовано на основе структуры дерева Trie для эффективного сканирования графа слов, создающего направленный ациклический граф (DAG) всех возможных слов в предложении.
* Используется метод динамического программирования для поиска максимальной вероятностной последовательности, основанной на частоте слов.
* Для незарегистрированных слов используется модель HMM на основе способности китайских символов образовывать слова, используя алгоритм Viterbi.
Функциональность 1): Сегментация
==========
* Метод `jieba.cut` принимает два входных параметра: 1) первый параметр — это строка, которую требуется сегментировать; 2) параметр `cut_all` управляет выбором полного режима.
* Метод `jieba.cut_for_search` принимает один параметр: строку для сегментации, этот метод предназначен для сегментации текста при создании обратного индекса в поисковых системах, имеет более мелкое зерно.
* Обратите внимание: строка для сегментации может быть строкой gbk, utf-8 или unicode.
* Методы `jieba.cut` и `jieba.cut_for_search` возвращают объект типа generator, который можно использовать в цикле `for` для получения каждого слова после сегментации (unicode), либо преобразовать его в список с помощью `list(jieba.cut(...))`.
Код примера (токенизация)
```markdown
# coding=utf-8
import jieba
```seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print "Полный режим:", "/ ".join(seg_list) # Полный режим
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print "По умолчанию:", "/ ".join(seg_list) # Точечный режим
seg_list = jieba.cut("他来到了网易杭研大厦") # По умолчанию точечный режим
print ", ".join(seg_list)
seg_list = jieba.cut_for_search("小明硕士毕业于中国科学院计算所,后在日本京都大学深造") # Режим поиска
print ", ".join(seg_list)
Выходные данные:
【Полный режим】: 我/ 来到/ 北京/ 清华/ 清华大学/ 华大/ 大学
【Точечный режим】: 我/ 来到/ 北京/ 清华大学
【Распознание новых слов】: 他, 来到, 了, 网易, 杭研, 大厦 (Здесь, «杭研» отсутствует в словаре, но был распознан алгоритмом Viterbi)
【Режим поиска】: 小明, 硕士, 毕业, 于, 中国, 科学, 学院, 科学院, 中国科学院, 计算, 计算所, 后, 在, 日本, 京都, 大学, 日本京都大学, 深造
Разработчики могут указывать свой собственный словарь, чтобы включить слова, которых нет в словаре Jieba. Хотя Jieba имеет способность распознавать новые слова, добавление новых слов может обеспечить более высокую точность.
Использование: jieba.load_userdict(file_name)
# file_name
— путь к пользовательскому словарю
Формат словаря такой же, как и в dict.txt
; каждое слово занимает одну строку; каждая строка состоит из трёх частей: слова, частоты использования и типа слова (может быть пропущено); разделены пробелами.
Пример: * Пользовательский словарь: https://github.com/fxsjy/jieba/blob/master/test/userdict.txt
Пример использования: https://github.com/fxsjy/jieba/blob/master/test/test_userdict.py
До добавления словаря: Ли XiaoFu / является / инновационным / директором / также / является / облачным / вычислением / специалистом /
После добавления пользовательского словаря: Ли XiaoFu / является / директором по инновациям / также / является / экспертом по облачному вычислению /
"Улучшение корректировки ошибок с помощью пользовательских словарей" --- https://github.com/fxsjy/jieba/issues/14
jieba.analyse.extract_tags(sentence, topK)
# Нужно импортировать jieba.analyse
sentence
— текст для выделения ключевых слов
topK
— количество ключевых слов с наибольшим весом TF/IDF, по умолчанию равно 20
Код примера (извлечение ключевых слов):
https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py
Принцип работы: разделение целевого текста по строкам, распределение каждой строки между несколькими процессами Python для параллельной токенизации, а затем объединение результатов для увеличения скорости токенизации
Основан на модуле multiprocessing Python, временно не поддерживающем Windows
Пример использования:
jieba.enable_parallel(4)
# Включение режима параллельной токенизации, параметр — количество параллельных процессовjieba.disable_parallel()
# Выключение режима параллельной токенизации* Пример:
https://github.com/fxsjy/jieba/blob/master/test/parallel/test_file.py
Экспериментальные результаты: на компьютере Linux с четырьмя ядрами и частотой 3.4 ГГц, при точной токенизации полного романа "Жень Юн", достигнута скорость 1 МБ/с, что составляет 3.3 раза быстрее однопоточной версии.
Словарь с небольшим объемом памяти https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small
Лучший словарь для токенизации традиционных символов https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big
Скачайте нужный вам словарь и замените jieba/dict.txt или используйте jieba.set_dictionary('data/dict.txt.big')
jieba использует ленивую загрузку, поэтому "import jieba" не вызывает сразу загрузку словарей; они загружаются только тогда, когда это требуется. Если вы хотите инициализировать jieba вручную, вы можете сделать это самостоятельно.
import jieba
jieba.initialize() # Ручная инициализация (необязательно)
В версиях до 0.28 нельзя было указывать путь к основному словарю. Благодаря механизму ленивой загрузки теперь можно менять путь к основному словарю:
jieba.set_dictionary('data/dict.txt.big')
Дополнительные вопросы доступны здесь: https://github.com/fxsjy/jieba/issues?sort=updated&state=closed
https://github.com/fxsjy/jieba/blob/master/Changelog
"Jieba" (китайское слово "заикание") — модуль сегментации китайского текста: создан для того, чтобы быть лучшим модулем сегментации китайских слов на Python.
easy_install jieba
или pip install jieba
;python setup.py install
;jieba
в текущую директорию или в директорию python site-packages;import jieba
, что будет строить дерево Trie только при первом импорте (что занимает несколько секунд).Алгоритм
========jieba.cut
принимает два входных параметра: 1) первый параметр — это строка, требующая сегментации, а 2) второй параметр — cut_all
, параметр, используемый для контроля над типом сегментации;jieba.cut
возвращает структуру итерационного генератора, где можно использовать цикл for
для получения сегментации слов (в unicode), или list(jieba.cut(...))
для создания списка;jieba.cut_for_search
принимает один параметр: строку, требующую сегментации, и разрезает предложение на короткие слова;# encoding=utf-8
import jieba
seg_list = jieba.cut("我来到北京清华大学", cut_all=True)
print "Полный режим:", "/".join(seg_list) # Полный режим
seg_list = jieba.cut("我来到北京清华大学", cut_all=False)
print "По умолчанию:", "/".join(seg_list) # По умолчанию
seg_list = jieba.cut("он пришёл в Нетецзи Ханьсяньское здание")
print ", ".join(seg_list)
```seg_list = jieba.cut_for_search("Сяoming окончил магистратуру Китайской академии наук Институт вычислительной техники, затем продолжил обучение в университете Киото, Япония") # режим поисковой системы
print ", ".join(seg_list)
Выход:
[Полный режим]: я/ пришёл/ в/ Пекин/ университет/ университет_Пекина/ университетская_корпорация/ корпорация
[Точный режим]: я/ пришёл/ в/ университет_Пекина
[Распознавание неизвестных слов]: он, пришёл, в, Нетецзи, Ханьсяньское, здание (в данном случае "Ханьсяньское" отсутствует в словаре, но распознано алгоритмом Витебского)
[Режим поисковой системы]: сяoming, магистратура, окончил, китайская, академия, наук, китайская_академия_наук, институт, вычислительная, техника, затем, университет, киото, япония, университет_киото, обучение
Функция 2): Добавление пользовательского словаря
==========
* Разработчики могут указывать свой собственный пользовательский словарь для включения в словарь jieba. Jieba имеет возможность распознавания новых слов, но добавление своих собственных новых слов может обеспечить более высокий процент правильной сегментации.
* Использование: `jieba.load_userdict(file_name) # file_name — это путь к пользовательскому словарю`
* Формат словаря такой же, как и у `analyse/idf.txt`: одно слово на строку; каждая строка разделена на две части, первая — само слово, вторая — частота слова, разделённые пробелом
* Пример: облачная_вычислительная_технология 5
Ли_Сяофу 2
Центр_Инноваций 3
до_загрузки_словаря: Ли_Сяофу / является / Центр / Инноваций / директором / также / является / облачная_вычислительная_технология / область / эксперта /
после_загрузки_словаря: Ли_Сяофу / является / Центр_Инноваций / директором / также / является / облачная_вычислительная_технология / область / эксперта /
Функция 3): Выделение ключевых слов
================
* `jieba.analyse.extract_tags(sentence, topK)` # требуется импорт jieba.analyse
* `sentence`: текст для анализа
* `topK`: чтобы вернуть несколько самых больших ключевых слов по весу TF/IDF, значение по умолчанию равно 20
Пример кода (выделение ключевых слов):
https://github.com/fxsjy/jieba/blob/master/test/extract_tags.py
Использование других словарей
========
Можно предоставить Jieba собственный пользовательский словарь, а также есть два словаря, доступных для загрузки:
1. Можно использовать меньший словарь для снижения потребления памяти:
https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.small
2. Также есть большой файл, который лучше поддерживает традиционные знаки (繁體):
https://github.com/fxsjy/jieba/raw/master/extra_dict/dict.txt.big
По умолчанию используется промежуточная словарная база, называемая `dict.txt`, которая входит в состав распространяемого пакета.
В любом случае, сначала скачайте нужный вам файл, а затем вызовите `jieba.set_dictionary('data/dict.txt.big')` или просто замените существующий `dict.txt`.Инициализация
========
По умолчанию Jieba использует ленивую загрузку, чтобы создавать префиксное дерево только при необходимости. Это занимает от 1 до 3 секунд один раз, после чего инициализация больше не выполняется. Если вы хотите инициализировать Jieba вручную, вы можете вызвать:
```python
import jieba
jieba.initialize() # (необязательно)
Вы также можете указать словарь (поддерживается начиная с версии 0.28):
jieba.set_dictionary('data/dict.txt.big')
http://jiebademo.ap01.aws.af.cm/
(Поддерживается Appfog)
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )