Друзья, которые выполняли поиск, знают, что качество сегментации слов напрямую влияет на наши окончательные результаты поиска. В области сегментации слов сегментация английских слов намного проще, потому что английские предложения разделены пробелами, а наш китайский обширен и глубок.Одни и те же слова представляют разные значения в разных контекстах.Иногда мы должны контактироватьТолько контекст может знать его точное значение, поэтому сегментация китайских слов всегда была большой проблемой в области сегментации слов.
Пекинский университет представил перед новым открытым исходным кодом прерыватель слов, согласно результатам теста, который является точностью и скоростью, чем другое слово 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())}")
Результат выполнения следующий:
результаты теста джиеба
Код в основном тот же, но использование токенизатора немного отличается.
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())}")
Результат выполнения следующий:
Результаты теста emmm кажутся несколько неожиданными, а как насчет лучшей точности pkuseg? ? ? pkuseg занимает почти в три раза больше времени, чем jieba, а эффект извлечения не так хорош, как сегментация слов jieba! Итак, я пошел искать pkuseg, и результат такой....
В общем, pkuseg - это слишком, и нет таких волшебных авторов, есть немного слепого глаза, может быть, это особенность формулировки сегмента!