Китайский токенизатор Пекинского университета с открытым исходным кодом получил пощечину...

Python

Друзья, которые выполняли поиск, знают, что качество сегментации слов напрямую влияет на наши окончательные результаты поиска. В области сегментации слов сегментация английских слов намного проще, потому что английские предложения разделены пробелами, а наш китайский обширен и глубок.Одни и те же слова представляют разные значения в разных контекстах.Иногда мы должны контактироватьТолько контекст может знать его точное значение, поэтому сегментация китайских слов всегда была большой проблемой в области сегментации слов.

Пекинский университет представил перед новым открытым исходным кодом прерыватель слов, согласно результатам теста, который является точностью и скоростью, чем другое слово jieba слово.

Так что я просто хотел сделать простой тест! Поэтому я хотел использовать «Роман о трех королевствах» в качестве теста, чтобы извлечь частоту известных имен.

Сначала найдите список персонажей Троецарствия,

Получив имя человека, составьте список имен людей и установите его как словарь с ключом имени человека и значением 0. Я взял только некоторые имена Цао Вэй и Шу Хань, и коды следующие:

wei = ["许褚","荀攸","贾诩","郭嘉","程昱","戏志","刘晔","蒋济","陈群","华歆","钟繇","满宠","董昭","王朗","崔琰","邓艾","杜畿","田畴","王修","杨修","辛毗",
       "杨阜",
       "田豫","王粲","蒯越","张继","于禁","枣祗","曹操","孟德","任峻","陈矫","郗虑","桓玠","丁仪","丁廙","司马朗","韩暨","韦康","邴原","赵俨","娄圭","贾逵",
       "陈琳",
       "司马懿","张辽","徐晃","夏侯惇","夏侯渊","庞德","张郃","李典","乐进","典韦","曹洪","曹仁","曹彰"]

wei_dict = dict.fromkeys(wei, 0)
shu_dict = dict.fromkeys(shu, 0)

Затем скачайте электронную книгу о трех королевствах и прочитайте

def read_txt():
    with open("三国.txt", encoding="utf-8") as f:
        content = f.read()

    return content

результаты теста pkuseg

Использование pkuseg очень простое, сначала создайте экземпляр объекта pkuseg, и идея получения количества имен символов заключается в следующем: выполните цикл по списку после нашей сегментации слов, если имя символа в словаре имен символов Обнаружено, добавьте 1 к данным, код выглядит следующим образом:

def extract_pkuseg(content):
    start = time.time()
    seg = pkuseg.pkuseg()
    text = seg.cut(content)

    for name in text:
        if name in wei:
            wei_dict[name] = wei_dict.get(name) + 1
        elif name in shu:
            shu_dict[name] = shu_dict.get(name) + 1

print(f"pkuseg 用时:{time.time() - start}")
print(f"pkuseg 读取人名总数:{sum(wei_dict.values()) + sum(shu_dict.values())}")

Результат выполнения следующий:

pkuseg 测试结果

результаты теста джиеба

Код в основном тот же, но использование токенизатора немного отличается.

def extract_jieba(content):
    start = time.time()
    seg_list = jieba.cut(content)
    for name in seg_list:
        if name in wei:
            wei_dict[name] = wei_dict.get(name) + 1
        elif name in shu:
            shu_dict[name] = shu_dict.get(name) + 1

    print(f"jieba 用时:{time.time() - start}")
    print(f"jieba 读取人名总数:{sum(wei_dict.values()) + sum(shu_dict.values())}")

Результат выполнения следующий:

jieba 测试结果

Результаты теста emmm кажутся несколько неожиданными, а как насчет лучшей точности pkuseg? ? ? pkuseg занимает почти в три раза больше времени, чем jieba, а эффект извлечения не так хорош, как сегментация слов jieba! Итак, я пошел искать pkuseg, и результат такой....

В общем, pkuseg - это слишком, и нет таких волшебных авторов, есть немного слепого глаза, может быть, это особенность формулировки сегмента!