Skip to content

Instantly share code, notes, and snippets.

@bage79
Last active October 16, 2019 03:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bage79/86b3dcbcd4ef6b5286c8f1fbcbeba82d to your computer and use it in GitHub Desktop.
Save bage79/86b3dcbcd4ef6b5286c8f1fbcbeba82d to your computer and use it in GitHub Desktop.
코퍼스와 같은 말뭉치에서 정해진 단위로 문장을 나누고, 한 문장에서 특정한 패턴이 있을 경우, 그 문장을 지우는 기능
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