Сопоставление «промежутков байтов» с текстовым документом, Python

#python #nlp #tagged-corpus

#python #nlp #помеченный-корпус

Вопрос:

Я работаю с аннотированным корпусом, который содержит два набора файлов .txt. Первый набор содержит документы, которые были аннотированы (т.Е. Статьи, сообщения в блогах и т. Д.), А второй набор содержит фактические аннотации. Способ сопоставления аннотации с аннотируемым текстом — это «байтовые интервалы». Из файла readme:

 "The span is the starting and ending byte of the annotation in 
the document.  For example, the annotation listed above is from 
the document, temp_fbis/20.20.10-3414.  The span of this annotation 
is 730,740.  This means that the start of this annotation is 
byte 730 in the file docs/temp_fbis/20.20.10-3414, and byte 740 
is the character after the last character of the annotation."
 

Итак, вопрос: как мне проиндексировать начальный и конечный байты в документе, чтобы я мог сопоставить аннотацию с текстом в исходном документе? Есть идеи? Я работаю над этим в Python…

Комментарии:

1. Можете ли вы дать немного больше информации о том, что вы пробовали? Если текст находится в массиве python, то это просто данные [0] и данные [-1] для первого и последнего. Если он находится в файле, мне нравится модуль mmap. Или, может быть, я упускаю вопрос.

2. @Brian Только что прочитал mmap. Это решило проблему. Спасибо!

Ответ №1:

 "This means that the start of this annotation is 
byte 730 in the file docs/temp_fbis/20.20.10-3414, and byte 740 
is the character after the last character of the annotation.

     blah, blah, blah, example annotation, blah, blah, blah
                       |                 |
                  start byte          end byte

The data_type of all annotations should be 'string'."
 

Ответ №2:

 #open, seek, read
start, end = 730,740
f = open("myfile", "rb")
try:
    f.seek(start)
    while start > end
        byte = f.read(1)
        # Do stuff with byte.
        start -= 1
finally:
    f.close()