Comments (2)
안녕하세요, @mrchypark
해당 콜백 함수에 대해 문서화가 부족했던 것 같습니다.
테스트 코드에서 사용례를 찾아보실 수 있는데요,
Lines 41 to 48 in d3fa22f
한 라인에 대해 콜백함수는 총 두번 호출됩니다. 첫번째 호출에서는 콜백함수는 읽어들인 문자열의 총 길이를 반환하면 되며, 두번째 호출에서는 읽어들인 문자열을 주어진 버퍼로 복사하면 됩니다. 만약 첫번째 호출에서 0을 반환한 경우 모든 라인을 읽어들인 것으로 간주하여 반복을 중단합니다. (필요에 따라서 처음으로 돌아가 0번 라인부터 다시 읽어들일 수도 있습니다.)
int idx
는 0부터 시작하는 인덱스 번호로 현재 읽어들이는 라인이 몇번째 라인인지 가리키는 값입니다.char* buf
는 실제 결과값을 써 넣어야할 버퍼의 포인터인데요, 처음에는nullptr
로 넘어옵니다. 이 경우 현재 써넣을 문자열의 길이(바이트 단위)를 리턴해주면 됩니다. 다음에는 이 값으로nullptr
가 아닌 유효한 포인터가 넘어오는데 이 경우는 실제로 읽어들인 문자열을 해당 포인터로 복사해 넣으면 됩니다.void* user
는 콜백함수와 함께 넘겨주었던 사용자 전용 포인터입니다. 필요에 맞게 쓰시면 되겠습니다.- 반환값:
char* buf
에서 설명했듯,buf == nullptr
인 경우 읽어들인 문자열의 길이를 반환해야 합니다. 만약 0을 반환할 경우 문자열 읽어들이기가 끝났다고 처리됩니다.buf != nullptr
인 경우 0을 반환하면 됩니다.
콜백함수와 kiwi와의 상호작용을 차례대로 정리해보면 다음과 같습니다.
kiwi: reader(0, nullptr, user) 호출
reader: 첫번째 라인을 읽어들임. 총 길이가 100바이트였음. 100을 반환
kiwi: 내부적으로 buffer에 100바이트를 할당 후 reader(0, buffer, user) 호출
reader: 읽어들인 문자열을 buffer에 복사해넣음
kiwi: reader(1, nullptr, user) 호출
reader: 두번째 라인을 읽어들임. 총 길이가 200바이트였음. 200을 반환
kiwi: buffer에 200바이트를 할당 후 reader(1, buffer, user) 호출
reader: 읽어들인 문자열을 buffer에 복사해넣음
kiwi: reader(2, nullptr, user) 호출
reader: 세번째 라인을 읽어들이려 했으나 EOF에 도달하였음. 0을 반환
kiwi: 모든 문자열을 읽어들인 것을 확인하고 처리를 진행
주의할 사항은 extract_word 계열 함수에서는 전체 텍스트를 읽어들이는 과정이 여러번 진행될 수 있다는 것입니다. 즉, reader(0, ...)
부터 reader(N, ...)
까지 호출된 이후, 다시 reader(0, ...)
이 호출될 수 있습니다. 이 경우 reader(0, ...)
이 호출되었을때 첫번째 라인을 동일하게 반환해야 합니다. 만약 파일에서부터 결과를 읽어들이는 경우라면 reader(N, ...)
까지 읽은 후 EOF에 도달할 것이므로 reader(0, ...)
이 다시 호출되었을때 파일을 rewind하여 처음부터 다시 읽어내도록 처리해야합니다.
from kiwi.
감사합니다. 살펴보고 혹 이해 안되는게 있으면 질문 드리겠습니다.
테스트 코드 보는건 또 놓치고 있었네요.
다시 한번 감사드립니다. :)
from kiwi.
Related Issues (20)
- kiwi_builder_load_dict의 인자 설명에 관해 HOT 1
- 문장분리 예외처리 HOT 3
- 옛한글 문자를 특수 문자로 분리하지 않기
- kiwi 서버 권장 사양 문의드립니다.
- 버전 0.15.2 초기화 중 다운되는 현상 HOT 4
- [질문] 태그 커스텀 관련 HOT 3
- 문장분리 오류 HOT 1
- [질문] 스레드 마다 키위를 빌드하여 사용하는 경우 HOT 2
- 토큰화된 결과를 저장하는 방법 문의
- 품사 태그 관련 문의 HOT 1
- 문장분리 오류
- 문장분리 오류
- Kiwipiepy의 편의성 기능 역수입: glue & space
- 연철에 대한 오타 교정 추가 HOT 1
- [오류] 같은 단어에 대한 형태소 분석 문제 HOT 1
- 용언에서 선어말어미를 제외한 어미만 분리하기 HOT 1
- 입력 텍스트 내의 빈도 정보를 활용한 미등재어 추정
- Issue compiling version 0.15.0 to arm64 on VS2022 windows HOT 4
- 혹시 javascript용 API wrapper 개발 계획이 있을까요? HOT 2
- GPU server 에서 사용하는 경우 문제가 생길 수 있을까요? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from kiwi.