Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
9d47024
Add files via upload
Gugutse Oct 31, 2018
4703e64
Delete Quiz_1_answers.md
Gugutse Oct 31, 2018
75bb89c
Add files via upload
Gugutse Oct 31, 2018
f70692e
Update Quiz_1_answers.md
Gugutse Nov 1, 2018
6a9fb19
Update Quiz_1_answers.md
Gugutse Nov 1, 2018
883956c
Add files via upload
Gugutse Nov 3, 2018
f0a08d1
Create .gitkeep
Gugutse Nov 3, 2018
1b88043
Add files via upload
Gugutse Nov 3, 2018
2100857
Delete Segmentation.md
Gugutse Nov 3, 2018
9b875ef
Create .gitkeep
Gugutse Nov 3, 2018
817a619
Add files via upload
Gugutse Nov 3, 2018
9ca3555
Update Tokenization.md
Gugutse Nov 3, 2018
01c40ca
Update Tokenization.md
Gugutse Nov 3, 2018
e22b181
Add files via upload
Gugutse Nov 3, 2018
eb5e144
Add files via upload
Gugutse Nov 3, 2018
1ce0c46
Add files via upload
Gugutse Nov 3, 2018
9bee638
Add files via upload
Gugutse Nov 3, 2018
37f4173
Add files via upload
Gugutse Nov 3, 2018
2270cf3
Add files via upload
Gugutse Nov 4, 2018
191bcf7
Update Tokenization.md
Gugutse Nov 4, 2018
78d627a
Update Tokenization.md
Gugutse Nov 4, 2018
2abbef8
Delete sentences_tokenized.txt
Gugutse Nov 4, 2018
d3a6a0a
Add files via upload
Gugutse Nov 4, 2018
45ba072
Update Tokenization.md
Gugutse Nov 4, 2018
c67ee54
Delete sentences_tokenized.txt
Gugutse Nov 4, 2018
7b8006e
Add files via upload
Gugutse Nov 4, 2018
e08033c
Delete sentences_tokenized.txt
Gugutse Nov 4, 2018
f078798
Add files via upload
Gugutse Nov 4, 2018
740fd34
Update Tokenization.md
Gugutse Nov 4, 2018
7dd4b50
Update Tokenization.md
Gugutse Nov 4, 2018
0a68ceb
Update Tokenization.md
Gugutse Nov 4, 2018
289ec53
Add files via upload
Gugutse Nov 4, 2018
db94115
Create .gitkeep
Gugutse Nov 13, 2018
cc5843a
Add files via upload
Gugutse Nov 14, 2018
8b0b8e2
Add files via upload
Gugutse Nov 14, 2018
312d39a
Add files via upload
Gugutse Nov 20, 2018
65c598c
Add files via upload
Gugutse Nov 22, 2018
50493d4
Add files via upload
Gugutse Nov 22, 2018
d6534a5
Add files via upload
Gugutse Nov 22, 2018
73e04e4
Add files via upload
Gugutse Nov 22, 2018
10f3d26
Create .gitkeep
Gugutse Nov 26, 2018
522a9c7
Add files via upload
Gugutse Nov 26, 2018
5672a6b
Update Quiz_2_answers.md
Gugutse Nov 26, 2018
b2e8a8e
Update Quiz_2_answers.md
Gugutse Nov 26, 2018
037a216
Update Quiz_2_answers.md
Gugutse Nov 26, 2018
8da0295
Update Transliteration.md
Gugutse Nov 26, 2018
5f773c6
Add files via upload
Gugutse Nov 26, 2018
4e5e726
Update Transliteration.md
Gugutse Nov 26, 2018
ae89d49
Update Quiz_2_answers.md
Gugutse Nov 26, 2018
0a394ef
Add files via upload
Gugutse Nov 26, 2018
06df9a0
Update Transliteration.md
Gugutse Nov 26, 2018
edd8e21
Update Transliteration.md
Gugutse Nov 26, 2018
b16979b
Update Quiz_2_answers.md
Gugutse Nov 27, 2018
d33b704
Update Quiz_2_answers.md
Gugutse Nov 27, 2018
ce34e75
Update Quiz_2_answers.md
Gugutse Nov 27, 2018
d2f1735
Update Quiz_2_answers.md
Gugutse Nov 27, 2018
7881184
Update Quiz_2_answers.md
Gugutse Nov 27, 2018
f6a8269
Update Quiz_2_answers.md
Gugutse Nov 27, 2018
715567f
Add files via upload
Gugutse Nov 27, 2018
9f1a06f
Create .gitkeep
Gugutse Jan 15, 2019
8e3c101
Add files via upload
Gugutse Jan 15, 2019
6a12a7d
Add files via upload
Gugutse Jan 15, 2019
287ea16
Add files via upload
Gugutse Jan 15, 2019
95870ae
Add files via upload
Gugutse Jan 16, 2019
00e2c16
Add files via upload
Gugutse Mar 28, 2019
f8f8ed9
Delete Quiz_3_answers.md
Gugutse Mar 28, 2019
5fd64e1
Add files via upload
Gugutse Mar 28, 2019
fcefd39
Delete .gitkeep
Gugutse Mar 29, 2019
dea8f12
Delete .gitkeep
Gugutse Mar 29, 2019
364f595
Delete .gitkeep
Gugutse Mar 29, 2019
cb55bcf
Delete .gitkeep
Gugutse Mar 29, 2019
04aac7c
Create .gitkeep
Gugutse Mar 29, 2019
8a3cfbe
Add files via upload
Gugutse Mar 29, 2019
c702390
Delete .gitkeep
Gugutse Mar 29, 2019
5bc210b
Update pronunciation.py
Gugutse Mar 29, 2019
f383be9
Add files via upload
Gugutse Mar 29, 2019
4f03770
Add files via upload
Gugutse Mar 29, 2019
7c0c9e4
Add files via upload
Gugutse Mar 29, 2019
d2f3b7b
Add files via upload
Gugutse Mar 29, 2019
8bb9c99
Add files via upload
Gugutse Mar 29, 2019
69e2f77
Add files via upload
Gugutse Mar 29, 2019
993510e
Add files via upload
Gugutse Mar 29, 2019
7df1865
Add files via upload
Gugutse Mar 29, 2019
2146bb9
Delete rank_transformed.py
Gugutse Mar 29, 2019
117bfa4
Add files via upload
Gugutse Mar 29, 2019
47ab1c3
Delete en_gum-ud-test.conllu
Gugutse Mar 29, 2019
20cffd5
Add files via upload
Gugutse Mar 29, 2019
2bb83cb
Add files via upload
Gugutse Mar 29, 2019
8d10615
Update tagger.py
Gugutse Mar 29, 2019
a95b125
Add files via upload
Gugutse Mar 29, 2019
c19e397
Add files via upload
Gugutse Mar 29, 2019
cbb20fa
Add files via upload
Gugutse Mar 31, 2019
f118527
Add files via upload
Gugutse Mar 31, 2019
6854f66
Add files via upload
Gugutse Mar 31, 2019
0094f83
Rename Segmentation.md to Segmentation-response.md
Gugutse Apr 2, 2019
df83b60
Rename Tokenization.md to Tokenization-response.md
Gugutse Apr 2, 2019
2d54bbd
Rename Transliteration.md to Transliteration-response.md
Gugutse Apr 2, 2019
838c569
Rename Unigram_model.md to Unigram_model-response.md
Gugutse Apr 2, 2019
f01eff9
Rename Unigram-tagger.md to Unigram_tagger-response.md
Gugutse Apr 2, 2019
3d1a5a7
Create .gitkeep
Gugutse Apr 3, 2019
d4b49e0
Add files via upload
Gugutse Apr 3, 2019
7ae1d53
Delete .gitkeep
Gugutse Apr 3, 2019
f9737a9
Update Xrenner-response.md
Gugutse Apr 3, 2019
8edf412
Update Xrenner-response.md
Gugutse Apr 3, 2019
9f0c5b9
Add files via upload
Gugutse Apr 3, 2019
110bd72
Add files via upload
Gugutse Apr 3, 2019
80d9d48
Add files via upload
Gugutse Apr 3, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
153 changes: 153 additions & 0 deletions 2018-komp-ling/practicals/Segmentation/Segmentation-response.md

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.
356 changes: 356 additions & 0 deletions 2018-komp-ling/practicals/Segmentation/segmentation_nltk.txt

Large diffs are not rendered by default.

346 changes: 346 additions & 0 deletions 2018-komp-ling/practicals/Segmentation/segmentation_pragmatic.txt

Large diffs are not rendered by default.

151 changes: 151 additions & 0 deletions 2018-komp-ling/practicals/Segmentation/wiki_1.txt

Large diffs are not rendered by default.

83 changes: 83 additions & 0 deletions 2018-komp-ling/practicals/Tokenization/Tokenization-response.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
**Tokenization**

Как известно, даже путь в тысячи строк начинается с первой строки, а точнее даже с постановки первой задачи — куда вообще нужно идти. Чтобы иметь возможность разбить японский текст на токены, нам нужно следующее: создать словарь уникальных слов, подготовить тестовый файл с предложениями, написать алгоритм MaxMatch, оценить результат работы нашего алгоритма с помощью метрики WER.

Словарь мы создаем на основе файла ja_gsd-ud-train.conllu, используя регулярные выражения, чтобы избавиться от ‘шума’:

$ sed ‘/^#/d’ ja_gsd-ud-train.conllu > ja_gsd-ud-train.conllu-clean
$ cut -f2 -d’ ‘ ja_gsd-ud-train.conllu-clean > ja_gsd-ud-train.conllu-dict
$ sort -u ja_gsd-ud-train.conllu-dict > ja_gsd-ud-train.conllu-dict_uniq

Открываем файл в редакторе vim, чтобы оценить его вид. Получившийся словарь я преобразовала в dictionary.txt и удалила первую и последнюю пустые строки. Получилось 15326 уникальных слов:

$ wc -l dictionary.txt
15325 dictionary.txt

Чтобы извлечь предложения из файла ja_gsd-ud-test.conllu (именно их мы и будем токенизировать) нам также потребуются регулярные выражения:

$ sed -n ‘/^# text =/p’ ja_gsd-ud-test.conllu > jp-sentences.txt
$ sed -e 's/^# text = //' jp-sentences.txt > sentences.txt

Получилось 558 предложений (команда $ wc -l выдает 557, но $ wc -l — это подсчет перевода строки, поэтому нужно прибавить еще последнее предложение).

С получившимися файлами dictionary.txt и sentences.txt можно работать дальше.

Алгоритм MaxMatch, который я применила (конечно, его можно сделать и в более общем виде, чтобы аргументы можно было вводить из командной строки):

# открываем файл со словарем
with open('dictionary.txt', 'r') as d:
lines_dict = d.readlines()
lines_dict = [line.strip() for line in lines_dict]

# открываем файл с текстом, в котором хотим выделить токены
with open('sentences.txt', 'r') as s:
lines_sent = s.readlines()
lines_sent = [line.strip() for line in lines_sent]

# сортируем словарь по длине слов так, чтобы сначала шли длинные слова
def sortbylength(word):
return len(word)
def new_sorted(dictionary):
dict_sorted = sorted(dictionary, key=sortbylength, reverse=True)
return dict_sorted

dictionary = lines_dict
new_dictionary = new_sorted(dictionary)

‘’’ применяем MaxMatch
проверяем, совпадают ли первые символы строки со словом из словаря;
если да — отделяем слово и начинаем по-новой с оставшимися символами строки,
если нет — неизвестный символ назначается словом, отделяется и мы повторяем алгоритм с оставшимися символами;
если длина строки — ноль, то и токенов, соответственно, нет
‘’’
def maxmatch(line):
if len(line) == 0:
return '\n'
try:
word = next(w for w in new_dictionary if line.startswith(w))
except StopIteration:
word = line[0]
return (word+ ' ' + maxmatch(line[len(word):]))

list = lines_sent

for line in list:
sentences_tokenized = maxmatch(line)
print(sentences_tokenized)

В итоге мы получаем файл с предложениями, разбитыми на токены (почистила его фильтром [x for x in sentences_tokenized if x]).

Чтобы иметь возможность вводить предложения из командной строки, в программу нужно импортировать sys, а также добавить следующее:

for line in sys.stdin:
for word in maxmatch(line):
print(word)

С помощью команды

$ grep '^[0-9]' ja_gsd-ud-test.conllu | cut -d $'\t' -f2 > correct_sentences_tokenized.txt

получаем файл с токенами, которые правильно и последовательно выделены из наших тестовых предложений.

В конце концов у меня получилось 2 файла c текстом, токенизированным по предложениям: correct_sentences_tokenized.txt (результат) и sentences_tokenized.txt (гипотеза), которые предстояло сравнить, используя метрику WER, используя предложенный алгоритм. Это долго не удавалось сделать (2 дня), программа вылетала. В конце концов я посчитала значение WER на 30 первых предложениях. Результат такой: 6.52% (вероятно, многие из слов в токенизируемых предложениях отсутствовали в нашем словаре).

4 changes: 4 additions & 0 deletions 2018-komp-ling/practicals/Tokenization/WER_result

Large diffs are not rendered by default.

Loading