• Stars
    star
    145
  • Rank 254,144 (Top 6 %)
  • Language
    Python
  • Created over 7 years ago
  • Updated about 5 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

띄어쓰기 오류 교정 라이브러리입니다. CRF 와 같은 머신러닝 알고리즘이 아닌, 직관적인 접근법으로 띄어쓰기를 교정합니다.

Korean Space Error Corrector

soyspacing 은 한국어 띄어쓰기 문제를 해결하기 위한 휴리스틱 알고리즘을 제공합니다. Conditional Random Field 와 비교하여 가벼운 모델 사이즈와 빠른 학습이 가능합니다.

이 알고리즘은 ScatterLabsunggu님, Emily Yunha Shin님과 함께 작업하였습니다.

  • version = 0.1.23은 미완성된 CRF 기반 띄어쓰기 알고리즘을 포함하고 있었습니다.
  • version = 1.0.0부터 미완성된 CRF를 지우고 휴리스틱 기반 알고리즘만 제공합니다.

현재 (1.0.15) 버전에서는 학습된 모델을 제공하지 않습니다. 띄어쓰기 교정은 이를 적용할 데이터셋의 단어 분포에 따라 적합한 모델이 다릅니다. 이러한 이유로 soyspacing 에서는 학습된 모델 대신, 학습이 가능한 패키지만을 제공합니다. 사용법은 아래의 usage 에, 더 자세한 설명은 slides 를 참고하세요.

Setup

pip install soyspacing

Require

  • Python >= 3.4 (not tested in Python 2)
  • numpy >= 1.12.1

Usage

학습은 텍스트 파일 경로를 입력합니다.

from soyspacing.countbase import CountSpace

corpus_fname = '../demo_model/134963_norm.txt'
model = CountSpace()
model.train(corpus_fname)

학습된 모델의 저장을 위해서는 모델 파일 경로를 입력합니다. JSON 형식으로 모델을 저장할 수 있습니다. 저장된 파일 용량을 고려하며 JSON 형식이 아닐 때 save / load 가 좀 더 쉽습니다.

model.save_model(model_fname, json_format=False)

학습된 모델을 불러올 수 있습니다.

model = CountSpace()
model.load_model(another_model_fname, json_format=False)

띄어쓰기 교정을 위한 패러메터는 네 가지가 있습니다. 이를 입력하지 않으면 default value 를 이용합니다.

verbose=False
mc = 10  # min_count
ft = 0.3 # force_abs_threshold
nt =-0.3 # nonspace_threshold
st = 0.3 # space_threshold

sent = '이건진짜좋은영화 라라랜드진짜좋은영화'

# with parameters
sent_corrected, tags = model.correct(
    doc=sent,
    verbose=verbose,
    force_abs_threshold=ft,
    nonspace_threshold=nt,
    space_threshold=st,
    min_count=mc)

# without parameters
sent_corrected, tags = model.correct(sent)

print(sent_corrected)
# 이건 진짜 좋은 영화 라라랜드진짜 좋은 영화

특정 단어, 혹은 어절의 앞 뒤를 반드시 띄거나 붙여쓴다는 규칙이 있다면 이를 적용할 수 있습니다. 아래처럼 어절과 어절 앞, 뒤에 대한 띄어쓰기 태그가 포함되어 있는 텍스트 파일을 준비합니다. 진짜 라는 단어의 앞, 뒤는 반드시 띄어쓰기를 하고, 사이에는 반드시 붙여쓰기를 한다는 의미입니다. 이 파일을 rules.txt 에 저장합니다.

가령	101
진짜	101
가게는	1001
가게로	1001
가게야	1001

위의 파일을 RuleDict 로 읽어온 뒤, 위의 예시를 다시 적용하면 라라랜드와 진짜 사이가 띄어졌음을 확인할 수 있습니다.

from soyspacing.countbase import RuleDict

rule_dict = RuleDict('filepath')
sent_corrected, tags = model.correct(sent, rules=rule_dict)
print(sent_corrected)
# 이건 진짜 좋은 영화 라라랜드 진짜 좋은 영화

더 자세한 내용의 Jupyter notebook 형식 tutorial 파일이 ./tutorials/에 있습니다.

관련 연구 / 제안된 모델의 원리 / CRF 와의 성능 비교 / 그 외 활용 팁의 내용이 포함되어 있는 presentation 파일이 제공됩니다.

CRF based space error correction

pycrfsuite 를 이용하여 띄어쓰기를 교정하는 패키지입니다. pycrfsuite 에 데이터를 입력하기 편하도록 Template, Transformer 의 utils 를 함께 제공합니다.

링크

More Repositories

1

soynlp

한국어 자연어처리를 위한 파이썬 라이브러리입니다. 단어 추출/ 토크나이저 / 품사판별/ 전처리의 기능을 제공합니다.
Python
941
star
2

KR-WordRank

비지도학습 방법으로 한국어 텍스트에서 단어/키워드를 자동으로 추출하는 라이브러리입니다
Python
353
star
3

textmining-tutorial

(한국어) 텍스트 마이닝을 위한 공부거리들
Jupyter Notebook
203
star
4

customized_konlpy

Customized KoNLPy - Korean Natural Language Processing Toolkit KoNLPy wrapping code
Python
126
star
5

textrank

Implementation TextRank and related utils
Python
85
star
6

KoBERTScore

BERTScore for Korean
Python
73
star
7

fastcampus_textml_blogs

패스트캠퍼스, 자연어처리를 위한 머신러닝, 수업관련 포스트 입니다.
70
star
8

huggingface_konlpy

Training Transformers of Huggingface with KoNLPy
Jupyter Notebook
68
star
9

WordPieceModel

Word Piece Model python light version with functions tokenize/save/load
Python
66
star
10

namuwikitext

Wikitext format dataset of Namuwiki (Most famous Korean wikipedia)
Python
50
star
11

soy

Python
50
star
12

naver_news_search_scraper

검색어 기준으로 네이버뉴스와 댓글을 수집하는 파이썬 코드
Python
43
star
13

korean_lemmatizer

한국어 용언 분석기 (원형 복원, 용언 형태소 분석)
Python
41
star
14

python_ml4nlp

패스트캠퍼스 자연어처리를 위한 머신러닝 실습 자료실
Jupyter Notebook
40
star
15

soykeyword

Python library for keyword extraction
Python
39
star
16

textmining_dataset

텍스트마이닝 실습을 위한 데이터셋 핸들러
Python
38
star
17

clustering4docs

Clustering algorithm library. Implemented spherical kmeans
Python
37
star
18

sejong_corpus_cleaner

세종 말뭉치 데이터를 정제하기 위한 utils
Python
36
star
19

naver_movie_scraper

네이버 영화 정보 및 사용자 작성 영화평/평점 데이터 수집기
Python
29
star
20

kmrd

Synthetic dataset for recommender system created from Naver Movie rating system
Python
24
star
21

levenshtein_finder

Similar string search in Levenshtein distance
Python
22
star
22

python_ml_intro

패스트캠퍼스, 파이썬을 이용한 머신러닝 입문 실습 코드
Jupyter Notebook
21
star
23

python_ml4tm

패스트캠퍼스 텍스트마이닝을 위한 머신러닝 실습 자료실
Jupyter Notebook
20
star
24

kowikitext

Python
19
star
25

petitions_dataset

청와대 국민청원 게시판으로부터 수집된 데이터
Python
17
star
26

synthetic_dataset

Synthetic data generator for machine learning
Python
16
star
27

petitions_archive

청와대 국민청원 데이터 아카이브
15
star
28

petitions_scraper

청와대 국민청원 게시판의 데이터를 수집하는 스크래퍼
Python
15
star
29

pycrfsuite_spacing

python-crfsuite를 이용한 한국어 띄어쓰기 교정기
Python
14
star
30

sejong_corpus

세종말뭉치 가공데이터 Repository
Jupyter Notebook
13
star
31

crf_postagger

Korean Part-of-Speech Tagger using Conditional Random Field (CRF)
Python
12
star
32

kmeans_to_pyLDAvis

Visualizing k-means using pyLDAvis
Python
11
star
33

komoran3py

Komoran 3 in Python
Python
11
star
34

hmm_postagger

Korean Morphological Analyzer using Hidden Markov Model (HMM)
Python
10
star
35

flask_api_tutorial

Flask 로 API 를 만들기 위한 튜토리얼
Python
10
star
36

kmeans_ensemble

Python k-means ensemble package & tutorials
Python
9
star
37

text_embedding

Inferring vector of unseen words
Python
7
star
38

archive_carblog_analysis

Carblog dataset (github.com/lovit/carblog_dataset) 의 분석 코드입니다
Python
6
star
39

joint_visualization_of_words_and_docs

(Demo) Joint visualization for representation of words and docs trained from Doc2Vec
Python
6
star
40

ppomppu_scraper

뽐뿌게시판 본문, 제목, 스크래퍼
Python
6
star
41

text-dedup

Python package for memory-friendly text de-duplication
Python
6
star
42

open-review2

구관이 명관인 데이터마이닝 알고리즘들
5
star
43

pagerank

PageRank
Jupyter Notebook
5
star
44

topic_embedding

Embedding words to topic space
Python
5
star
45

ekmeans

Epsilon constrained k-means for document clustering with noise removal
Python
5
star
46

sharing_korean_dictionary

다양한 분야의 한국어 part of speech tagging / named entity recognition 용 사전을 공유하기 위한repository입니다
Python
4
star
47

rnnspace

Space Correction using Character-level Recurrent Neural Network (RNN, LSTM, GRU, etc)
Python
4
star
48

lovit.github.io

HTML
4
star
49

washingtonpost_scraper

Washington Post Search Scraper
Python
3
star
50

archive_clustering_visualization

Visualize clustering result
Jupyter Notebook
3
star
51

korean-wikis-handler

한국어 위키피디아, 나무위키 데이터 핸들링
Jupyter Notebook
3
star
52

soygraph

Graph similarity & ranking algorithms
Python
3
star
53

python_upload_webserver

Flask, Waitress based file upload webserver
Python
3
star
54

sec.gov_scrapper

Scrapping code for www.sec.gov
Jupyter Notebook
2
star
55

ie_openseminar_1_from_text_to_doc2vec_tsne

Openseminar #1 From scraping to Word2vec, Doc2Vec visualization with t-SNE
Jupyter Notebook
2
star
56

s3-log-parser

AWS S3 access log parser
Python
2
star
57

fastcosine

Approximiated nearest neighbor search for sparse vector
Python
2
star
58

korean_autumn_hmm

"한국의 봄 가을은 짧아지고 있는가? 김동현, 신하용, 대한산업공학회지 2013" 논문의 재현
2
star
59

latex_sample

Latex 으로 문서 작업을 하고, git 으로 버전관리를 하는 것을 설명하기 위한 sample repository 입니다.
TeX
1
star
60

python-stopwatch

Python stopwatch
Python
1
star
61

simple_ner

Simple NER Extraction
Jupyter Notebook
1
star
62

bag-of-concepts

Python
1
star
63

crs_downloader

Python
1
star
64

reddit_scraper

Reddit scraper. Get latest posts from Reddit
Python
1
star
65

wilsoncenter_scraper

Wilsoncenter web page scraper
Python
1
star
66

s3log_monitor

S3 log monitor
Python
1
star
67

network_based_nearest_neighbors

Network-based Nearest Neighbor Indexer
Python
1
star
68

lda_significance_rank

LDA 모델의 junk topic, words 탐색기
Python
1
star
69

imdb_scraper

Python
1
star
70

easy_wikitext

Wikitext dataset handler
Python
1
star
71

google_scholar_citation_keywords

Google scholar citation keyword
Jupyter Notebook
1
star
72

archive_acl2019review

Python
1
star
73

wsj_scraper

Scrapping thumbnails of search result in WSJ
Python
1
star