Last active
October 16, 2019 03:50
-
-
Save bage79/86b3dcbcd4ef6b5286c8f1fbcbeba82d to your computer and use it in GitHub Desktop.
코퍼스와 같은 말뭉치에서 정해진 단위로 문장을 나누고, 한 문장에서 특정한 패턴이 있을 경우, 그 문장을 지우는 기능
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import re | |
class StringReplaceUtil(object): | |
""" | |
코퍼스와 같은 말뭉치에서 정해진 단위로 문장을 나누고, 한 문장에서 특정한 패턴이 있을 경우, 그 문장을 지우는 기능 | |
""" | |
def __init__(self, text: str, token_pattern: str): | |
""" | |
여러 문장을 특정한 패턴 단위로 나누어 사용. | |
:param text: 입력 텍스트 (=여러 문장) | |
:param token_pattern: 한 문장을 나타내는 패턴 | |
""" | |
self.token_re = re.compile(token_pattern, flags=re.S) # re.S=여러 줄에서 찾기 | |
self.text = text | |
def replace(self, pattern: str, to_str: str): | |
""" | |
패턴을 찾아 특정 문자열로 바꿈 | |
:param pattern: 문장안에서 찾을 패턴 | |
:param to_str: 바꾼후의 문자열 | |
:return: | |
""" | |
sentences = [] | |
last_end = 0 | |
remove_re = re.compile(pattern, flags=re.S) | |
for match in self.token_re.finditer(text): | |
start, end = match.span() | |
sentences.append(self.text[last_end: start]) | |
last_end = end | |
if remove_re.search(self.text[start:end]): | |
sentences.append(to_str) # 변경 후 | |
else: | |
sentences.append(self.text[start:end]) # 원본 그대로 | |
sentences.append(self.text[last_end:]) # 남은 마지막 부분도 추가 | |
return ''.join(sentences) | |
if __name__ == '__main__': | |
text = """abㄱcdefg | |
hijkㅎ | |
lmnㄱopqr | |
s9t | |
ㅎuvw | |
xyz""" | |
print(StringReplaceUtil(text, token_pattern=r'[ㄱ].*?[ㅎ]').replace(pattern=r'[0-9]+', to_str='')) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment