имеет ли python3 nltk word_tokenize () ограничение длины строки? - PullRequest
2 голосов
/ 05 июня 2019

У меня есть словарь, состоящий из первичного ключа базы данных со строкой.

self.mydict = {
1:'a small example'
,2:'some sentence'
,3:'a very long string around 30k characters'
}

Для пар «ключ-значение», где длина строки <1000, все токенизируются, как и следовало ожидать. <br>Для нескольких очень больших строк (длина = 30 000) токенизатор возвращает несколько прерывистых строк вмой вывод csv.

def write_data(self):
    headers=[]
    for x,y in self.mydict.items():
        headers.append([word_tokenize(y)])
        print(len(y))

    with open(self.outputdata, 'w', encoding='utf-8', newline='') as f:
        writer = csv.writer(f)
        for item in headers:
            writer.writerow(item)

Записывая результаты в csv, я получаю следующее:

['a','small','example']
['some','sentence']
['a','very','long',
string','around','30k','characters']"

Таким образом, строка длиной 30 Кб по какой-то причине разрывается и, кажется, разделяется на другуюлиния.Я могу обрезать первые ~ 1000 символов строк, и эта проблема исчезнет, ​​но я бы предпочел оставить длинные строки, поскольку я выполняю обработку на естественном языке.Это ошибка из-за длины строки или способа записи моего csv?

1 Ответ

1 голос
/ 06 июня 2019

Нет, ограничение длины строки для функции word_tokenize() в NLTK отсутствует.

Но csv.writer имеет ограничение на размер поля, см. https://docs.python.org/3.4/library/csv.html?highlight=csv#csv.field_size_limit

...