Form.h
형태 및 형태소에 관한 정보를 담는 구조체들이 선언된 헤더
- Author
bab2min (bab2min@gmail.com)
- Version
0.20.0
- Date
2024-07-01
-
namespace kiwi
Functions
-
struct Form
- #include <Form.h>
형태에 관한 모든 정보를 담는 구조체
Note
이 구조체는 변경 불가능한 상태로 사용된다. 인덱스는 모두 포인터로, std::vector는 FixedVector로 변경되어 수정이 불가능한 대신 각 값에 효율적으로 빠르게 접근 가능하다.
kiwi::Kiwi
내 실제 형태소 분석 단계에 쓰인다.
-
struct FormRaw
- #include <Form.h>
형태에 관한 모든 정보를 담는 구조체의 템플릿
Note
변경가능한 상태로 인덱스와 관련된 값이나 std::vector 등의 길이를 변경할 수 있음.
kiwi::KiwiBuilder
에서 사용한다.
-
struct Morpheme
- #include <Form.h>
형태소에 관한 모든 정보를 담는 구조체의 템플릿
Note
변경 불가능한 상태로 인덱스는 모두 포인터로, std::vector는 FixedVector로 변경되어 수정이 불가능한 대신 각 값에 효율적으로 빠르게 접근 가능하다.
kiwi::Kiwi
내 실제 형태소 분석 단계에 쓰인다.
-
struct MorphemeRaw
- #include <Form.h>
형태소에 관한 모든 정보를 담는 구조체의 템플릿
Note
변경가능한 상태로 인덱스와 관련된 값이나 std::vector 등의 길이를 변경할 수 있음.
kiwi::KiwiBuilder
에서 사용한다.Public Functions
-
MorphemeRaw()
-
~MorphemeRaw()
-
MorphemeRaw(const MorphemeRaw&)
-
MorphemeRaw(MorphemeRaw&&) noexcept
-
MorphemeRaw &operator=(const MorphemeRaw&)
-
MorphemeRaw &operator=(MorphemeRaw&&)
-
MorphemeRaw(POSTag _tag, CondVowel _vowel = CondVowel::none, CondPolarity _polar = CondPolarity::none, bool _complex = false, uint8_t _combineSocket = 0)
선행형태소의 자/모음 조건
-
inline CondPolarity polar() const
추가 분석이 가능한 형태소인지(파생어나 사이시옷이 포함된 합성명사 등)
-
inline bool complex() const
-
inline void setPolar(CondPolarity v)
-
inline void setComplex(bool v)
-
void serializerRead(std::istream &istr)
-
void serializerWrite(std::ostream &ostr) const
Public Members
-
uint32_t kform = 0
형태에 대한 포인터
-
uint8_t vpPack = 0
CondVowel, CondPolarity, complex를 각각 4, 3, 1비트로 묶어서 합친 값
-
uint8_t senseId = 0
의미 번호
-
uint8_t combineSocket = 0
형태소가 두 부분으로 분할된 경우 결합 번호를 표기하기 위해 사용된다.
Note
덥/VA
,춥/VA
등의 형태소는어/EC
와 만나면더워
,추워
와 같이 형태가 변화한다. 이 경우를 각각 처리하기 보다는더/V + ㅂ/V
,추/V + ㅂ/V
과 같이 분해하면ㅂ/V
+어/EC
가워
로 변한다는 규칙만으로 처리가 가능해진다. (이 규칙은chunks
를 이용해 형태소 정보에 담길 수 있음) 그러나 모든 ㅂ으로 끝나는 형태소가 위와 같은 규칙에 결합되면 안된다. 예를 들어굽/VA
의 경우어/EC
와 만나도굽어
라고 형태가 유지되기 때문. 따라서ㅂ/V
이 결합할 수 있는 조건을 명시해서 이 조건과 맞는 경우에만더/V + ㅂ/V
->덥/VA
과 같이 복원해야 한다.combineSocket
이 0이면 이런 결합 조건이 없는 일반 형태소임을 뜻하며, 0이 아닌 경우 결합 조건을 가지고 분해된 형태소임을 뜻한다.더/V
와워/UNK
(ㅂ/V + 어/EC
)는 예를 들어 3과 같이 동일한 combineSocket을 할당해 둘이 서로 결합이 가능한 형태소임을 식별한다.
-
Vector<uint32_t> chunks
여러 형태소가 결합되어 형태가 변경된 경우, 원 형태소 목록을 표기하기 위해 사용된다.
Note
되/VV + 어/EC
의 결합은돼
라는 형태로 축약될 수 있다. 분석과정에서돼
를 만난 경우 역으로되/VV + 어/EC
로 분석할 수 있도록돼/UNK
를 더미 형태소로 등록하고 chunks에는되/VV
와어/EC
에 대한 포인터를 넣어둔다.
-
Vector<std::pair<uint8_t, uint8_t>> chunkPositions
여러 형태소가 결합되어 형태가 변경된 경우, 원 형태소의 위치 정보를 표기하기 위해 사용된다.
Note
pair.first는 시작 지점, pair.second는 끝 지점을 나타낸다. chunkPositions.size()는 항상 chunks.size()와 같다.
-
int32_t combined = 0
분할된 형태소의 원형 형태소를 가리키는 오프셋
See also
Note
덥/VA
이더/V
+ㅂ/V
으로 분할된 경우더/V
는덥/VA
에 대한 오프셋을 combined에 저장해둔다.kiwi::Morpheme::getCombined()
를 통해 원형 형태소의 포인터를 구할 수 있음
-
float userScore = 0
-
uint32_t lmMorphemeId = 0
형태소의 언어모델 상의 인덱스 값을 보관하는 필드.
Note
대부분의 경우는 형태소 자체의 인덱스 값과 동일하지만, 이형태 형태소의 경우 원형 형태소의 인덱스 값을 가진다.
-
uint32_t origMorphemeId = 0
-
uint32_t groupId = 0
형태소의 그룹 인덱스.
Note
형태소 결합 시 음운 조건에 따라 이형태를 선택해야 하는 경우 그룹 인덱스가 동일한 형태소만 선택된다.
-
MorphemeRaw()
-
struct TypoForm
-
struct Form