Как построить корпус переводов для python NLTK?


Я работал с NTLK Python для общего анализа языка, и недавно я хотел бы создать корпус специально для переводов. Я не смог понять корпусные варианты и структуры, используемые NTLK для переводов.

Есть много материала о том, как читать или использовать ресурсы корпуса, но я не могу найти ничего подробно о создании корпуса стиля перевода. Я понимаю, просматривая ссылки на корпус, что существуют различные стилей и типов, однако я, кажется, не могу найти каких-либо конкретных примеров корпуса перевода или документации.

1 4

1 ответ:

Для перевода, как и наборы данных, NLTK может считывать корпусы выровненных по словам предложений с помощью AlignedCorpusReader. Файлы должны иметь следующий формат:

first source sentence
first target sentence 
first alignment
second source sentence
second target sentence
second alignment
Это означает, что лексемы должны быть разделены пробелами, а предложения начинаются с отдельных строк. Например, предположим, что у вас есть структура каталогов, подобная следующей:
reader.py
data/en-es.txt
data/en-pt.txt

Где содержимое файлов:

# en-es.txt
This is an example
Esto es un ejemplo
0-0 1-1 2-2 3-3

И

# en-pt.txt
This is an example
Esto é um exemplo
0-0 1-1 2-2 3-3

Вы можете загрузить эту игрушку пример использования следующего скрипта:

# reader.py    
from nltk.corpus.reader.aligned import AlignedCorpusReader

reader = AlignedCorpusReader('./data', '.*', '.txt', encoding='utf-8')

for sentence in reader.aligned_sents():
    print(sentence.words)
    print(sentence.mots)
    print(sentence.alignment)

Вывод

['This', 'is', 'an', 'example']
['Esto', 'es', 'un', 'ejemplo']
0-0 1-1 2-2 3-3
['This', 'is', 'an', 'example']
['Esto', 'é', 'um', 'exemplo']
0-0 1-1 2-2 3-3

Строка reader = AlignedCorpusReader('./data', '.*', '.txt', encoding='utf-8') создает экземпляр AlignedCorpusReader, который считывает все файлы, заканчивающиеся на '.txt' в './ каталог данных. Он также указывает, что кодировка файлов - 'utf-8'. Другими параметрами AlignedCorpusReader являются word_tokenizer и sent_tokenizer, word_tokenizer устанавливается в WhitespaceTokenizer() и sent_tokenizer устанавливается в RegexpTokenizer('\n', gaps=True).

Дополнительную информацию можно найти в документации (1 и еще 2).