[Python] TextRank 구현 코드

Posted by 적분 ∫2tdt=t²+c
2017.04.20 17:13 프로그래밍

앞선글(TextRank 기법을 이용한 핵심 어구 추출 및 텍스트 요약) 에서 텍스트 랭크 알고리즘을 소개하면서 직접 실험해보고자 파이썬 코드를 짰었는데요, 정리해서 공유해드립니다. 페이지랭크 계산에 networkx 패키지를 사용하므로, networkx가 설치되어있는지 확인부탁드립니다.


* 의존 패키지: networkx





사용법은 어렵지 않습니다. 다음과 같이 쓰면 됩니다.

TextRank 생성자는 인수로 window, coef, threshold를 받습니다.

* window : 문맥으로 사용할 단어의 개수. 기본값 5로 주면 특정 단어의 좌우 5개씩, 총 10개 단어를 문맥으로 사용합니다.

* coef : 동시출현 빈도를 weight에 반영하는 비율입니다. 기본값은 1.0로, 동시출현 빈도를 weight에 전부 반영합니다. 0.0일 경우 빈도를 반영하지 않고 모든 간선의 weight을 1로 동일하게 간주합니다.

* threshold: 문서 요약시 관련있는 문장으로 여길 최소 유사도값. 기본값은 0.005이고, 이 값보다 작은 유사도를 가지는 문장쌍은 관련없는문장으로 처리합니다.


문서요약시에는 loadSents로 문장을 읽어들이고, summarize로 결과를 얻습니다.




키워드 추출시에는 load로 문장을 읽어들이고, extract로 키워드를 추출합니다.




저작자 표시 비영리 동일 조건 변경 허락
신고
이 댓글을 비밀 댓글로
  1. 감사합니다!
  2. 좋은 글 감사합니다 !! 정말 큰 도움이 되었습니다 !! ㅎㅎ
    코드를 실행해보고싶은데

    Traceback (most recent call last):
    File "C:/Users/user1/PycharmProjects/untitled12/tr.py", line 186, in <module>
    tr.loadSents(RawSentenceReader('test2.txt'), lambda sent: filter(lambda x:x not in stopword and x[1] in ('NNG', 'NNP', 'VV', 'VA'), tagger.pos(sent)))
    File "C:/Users/user1/PycharmProjects/untitled12/tr.py", line 107, in loadSents
    for sent in filter(None, sentenceIter):
    File "C:/Users/user1/PycharmProjects/untitled12/tr.py", line 26, in __iter__
    for line in open(self.filepath, encoding='utf-8'):
    File "C:\Program Files\Anaconda3\lib\codecs.py", line 321, in decode
    (result, consumed) = self._buffer_decode(data, self.errors, final)
    UnicodeDecodeError: 'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte

    이러한 에러가 발생하는데 .. 해결방법을 모르겠어서 도움 얻고자 이렇게 댓글 남깁니다 .....!! ㅠㅠ
    답변 주시면 감사하겠습니다 !!
    • 인코딩 에러네요.
      입력파일이 utf-8로 인코딩이 되었는지 확인해보시길 바랍니다!