GinZA5(=Sudachi iPy>=0.6)로 49149 bytes 이상의 텍스트를 Tokenize

1. GinZA(또는 Sudachipy)에서 두 번째로 큰 텍스트 파일로 Tokenize를 할 수 없는 이야기


공부하고 있는Data Science 제품군 소개Python으로 시작하는 텍스트 시뮬레이션 시작.
(이 책, 주먹구구구식 이해를 체계적으로 해준 기엔자, 스페이, 수다치의 처리에 감사합니다).
샘플 코드는 GiNZA==4.0.6+SudachiPy==0.5.4 환경에서 사용하는 것을 추천합니다.
GinZA 버전을 높이면 속도가 빨라질까요?GinZA5.1 환경에서 샘플 코드를 실행해 Tokenize로 에도가와의 난보작'섀도우맨'의 텍스트를 만드는 코드 아래의 오류를 만들어 보았다.
Exception: Tokenization error: Input is too long, it can't be more than 49149 bytes, was 464332

2. 이유


Sudachi의 Slack 검색에서는 내부 비용 계산으로 인해 오버플로우가 발생하여 입력 치수에 제한이 있음을 설명합니다.
어느 버전부터 변경되었는지는 알 수 없지만 GiNZA==5.1 + SudachiPy==0.6.3 환경에서 이러한 오류가 발생할 수 있습니다.GiNZA==4.0.6 + SudachiPy==0.5.4 환경 환경에 오류가 없습니다.

3. 일시적인 해결 방안


입력 파일을 분할하는 것을 추천하기 때문에 .readlines 텍스트를 리스트에 한 줄 한 줄 읽습니다.텍스트를 블록으로 나누어 리스트에 저장합니다.Chunk에서 요소를 꺼내 Tokenize를 처리해 보았습니다.
import spacy

input_fn = 'text/kageotoko.corpus.txt'

nlp = spacy.load("ja_ginza")

with open(input_fn) as f:
    lines = f.readlines()

chunks = [' '.join(lines[i:i+100]) for i in range(0, len(lines), 100)]

for chunk in chunks:
    doc = nlp(chunk)
    for ## 以下処理省略

4. 장래의 과제


분할된 토큰니즈의 Doc 대상을 모은 DoocBin 대상도 있기 때문에 앞으로 필요하면 사용해 보세요.
https://spacy.io/api/docbin#_title

좋은 웹페이지 즐겨찾기