Closed eubinecto closed 3 years ago
components.py
: 필요없음builders.py
: IIPBuilder
없앱service.py
에서 build_iip도 없애버리기일단.. add_idiom
함수만 나중에 구현하면 될 것.
생각보다 많은 것을 변경했다.
결론만 말하자면 다음과 같이 변경했다:
def main():
sentences = [
"You are down to earth.",
"Have you found your feet on the new job?",
]
nlp = spacy.load("en_core_web_sm") # idiom matcher needs an nlp pipeline. Currently supports en_core_web_sm only.
idiom_matcher = IdiomMatcher.from_pretrained(nlp) # this will take approx 40 seconds.
for sent in sentences:
# process the sentence
doc = nlp(sent)
# identify all
matches = idiom_matcher(doc)
for token_id, start, end in matches:
print(nlp.vocab.strings[token_id], start, end)
print("-----")
if __name__ == '__main__':
main()
nlp & idiomMatcher는 분리해놓음. 어차피 문장을 proess를 해서 doc를 만들 때, 저것이 필요할 것이므로! 훨씬 깔끔해졌다.
이후에는 ... idiom_matcher.identify(doc)
함수를 추가하자. json 형식으로 출력을 하면 좋을 듯. (decoding 한 것, span, etc)
Why?
하나의 문장에 여러 관용구가 있는 경우, greedly-normalize로 인해 여러개가 있어도 모든 것들을 포함하는 하나의 관용구만 identify를 해버리게 되는 경우가 생김. e.g. I've got too much on my hands to help. 현재, 위 문장이 입력으로 들어오면 확인되는 idiom은 get on to 뿐이다. 사실 on one's hands도 매치를 하긴 하지만 get on to가 해당 관용구를 포함하는 범위에 있기 때문에 최종 결과물에서는 없어져 버린다.
모든 관용구를 다 찾아주는 것이 이 프로젝트의 본래 목표였다는 것을 감안해보면, 머지를 하는 것보단 그냥 찾을 수 있는 모든 관용구를 다 찾아주는 것이 더 좋다.
To-do's
IdiomMatcher
구조 생각해보기 & 구현하기 - 진행 중.