Мы уже рассказывали, как работать с японским языком с помощью сервиса Voyant Tools. Покажем, как можно самостоятельно провести токенизацию текстов на японском, применяя библиотеку fugashi, которая способна также провести морфологический анализ и выделять именованные сущности.
Иллюстрация: Надя Луценко
Многие задачи, связанные с автоматической обработкой текста, начинаются с токенизации — деления текста на слова (токены). На самом деле, токенами могут быть не только слова, но и более мелкие или крупные единицы текста, однако на практике чаще всего используют именно деление на слова. Текст на русском языке, например, можно поделить на слова по пробелам. А что делать с текстом на японском языке, в котором между словами нет пробелов?
Одно из популярных решений — использование словаря, в котором прописаны леммы и их всевозможные словоформы, а также некоторые морфологические сведения. Так устроена библиотека fugashi. Для поиска наиболее вероятных границ слов fugashi использует алгоритм Витерби, который ищет наиболее вероятную последовательность из цепей Маркова. Другой подход для определения границ слов — использование нейронных сетей, однако такой вариант может оказаться довольно затратным по времени.
Сначала необходимо скачать библиотеку fugashi через командную строку с помощью команды:
pip install fugashi[unidic-lite]
Пример кода:
import fugashi
text = 'Georgeさんはイタリア語を勉強します。'
tagger = fugashi.Tagger()
words = [word.surface for word in tagger(text)]
print(words)
В результате мы получили список слов: ['George', 'さん', 'は', 'イタリア', '語', 'を', '勉強', 'し', 'ます', '。']
Рассмотрим морфологические характеристики каждого токена подробнее:
勉強 名詞,普通名詞,サ変可能,* существительное, нарицательное, спрягается по форме サ, *
し 動詞,非自立可能,*,* глагол, используется после существительного, *, *
ます 助動詞,*,*,* глагольное окончание, *, *, *
Пример кода, с помощью которого можно найти 20 самых частотных топонимов в тексте:
#let's input the text
filepath_of_text = r"Texts/695.txt" #Soseki's Sorekara
sorekara = open(filepath_of_text, encoding="utf-8").read()
#eliminate the spaces
import re
sorekara = re.sub(r'\s', '', sorekara)
#initialize a list for the place names
places = []
#now loop through the tokens and keep only the place names
for token in tagger(sorekara):
if token.feature.pos3 == '地名':
places.append(token.surface)
#use the Counter function to create a frequency table
from collections import Counter
place_name_tally = Counter(places)
#look at the top 20 most frequent place names
place_name_tally.most_common(20)
[('金井', 58),
('古賀', 44),
('児島', 29),
('東京', 17),
('向島', 14),
('吉原', 14),
('小菅', 13),
('安達', 12),
('日本', 10),
('独逸', 8),
('浅草', 6),
('上野', 5),
('希臘', 4),
('神田', 4),
('下谷', 4),
('仲町', 4),
('支那', 3),
('江戸', 3),
('小倉', 3),
('一条', 3)] Если вы понимаете, что встроенного словаря unidic-lite не хватает для работы с текстом, то fugashi предлагает скачать на свой компьютер и использовать более подробные и объёмные словари UniDic. Можно выбрать словарь, исходя из текстов. Есть современный письменный, современный устный и одиннадцать видов словарей для классического японского:
Чтобы воспользоваться словарём, нужно скачать его на свой компьютер и прописать адрес к нему при вызове класса Tagger():
tagger = fugashi.Tagger('-d path_to_folder/UniDic-kindai_1603') Компания Google представила много новых ИИ-продуктов, а модель GPT опровергла известную математическую гипотезу Пала Эрдёша — рассказываем, что произошло в мире ИИ за последнее время
Facebook* и Instagram* будут сканировать фото и видео, чтобы находить детей, которые скрыли свой возраст
Можно ли заниматься NLP, если при словах «производная» и «матрица» хочется закрыть ноутбук? Да — если изучать математику не абстрактно, а через реальные задачи. Объясняем, какие разделы действительно нужны джуну,…