2017-04-03 14 views
0

Split Text into paragraphs NLTK - usage of nltk.tokenize.texttiling? 텍스트를 텍스트 입력에 보내는 방법을 설명했지만 여기에 표시된대로 단락/주제 변경에 의해 토큰 화 된 텍스트를 반환 할 수 없습니다. http://www.nltk.org/api/nltk.tokenize.html.NLTK nltk.tokenize.texttiling을 사용하여 텍스트를 단락으로 나누는 방법?

텍스트를 텍스트로 가져 오는 경우 동일한 untokenized 텍스트가 반환되지만 목록에는 아무런 소용이 없습니다. 내가하고 싶은 것은 수익입니다 나는 우리가이 이메일 캐릭터들, 그것은

s = "From: X\nTo: Y\nDate: 10/03/2017 Hello team,\nSome text here representing the body of the text. Regards,\nX\n\n*****DISCLAIMER*****\nTHIS EMAIL IS CONFIDENTIAL\nIF YOU ARE NOT THE INTENDED RECIPIENT PLEASE DELETE THIS EMAIL" 

과 같을 것이다 호출하면이 기본 구조

From: X 
    To: Y        (LOGISTICS) 
    Date: 10/03/2017 

    Hello team,      (INTRO) 

    Some text here representing 
    the body       (BODY) 
    of the text. 

    Regards,       (OUTRO) 
    X 

    *****DISCLAIMER*****    (POST EMAIL DISCLAIMER) 
    THIS EMAIL IS CONFIDENTIAL 
    IF YOU ARE NOT THE INTENDED RECIPIENT PLEASE DELETE THIS EMAIL 

에 따라 이메일이 무엇을

tt = nltk.tokenize.texttiling.TextTilingTokenizer(w=20, k=10,similarity_method=0, stopwords=None, smoothing_method=[0], smoothing_width=2, smoothing_rounds=1, cutoff_policy=1, demo_mode=False) 

    tiles = tt.tokenize(text) # same text returned 

이 다섯 섹션/문자열 s의 단락 - 물류, 소개, 신체, 아우터, 게시물 이메일 면책 조항 - 별도로 그래서 나는 몸의 모든 부분을 제거 할 수 있습니다 내선 nltk texttiling을 사용하여이 5 섹션을 어떻게 분리하여 반환 할 수 있습니까?

*** 모든 전자 메일이이 구조를 따르거나 동일한 문구를 사용하는 것은 아니므로 정규식을 사용할 수 없습니다.

답변

1

splitlines을 사용하면 어떨까요? 아니면 nltk 패키지를 사용해야합니까?

email = """ From: X 
    To: Y        (LOGISTICS) 
    Date: 10/03/2017 

    Hello team,      (INTRO) 

    Some text here representing 
    the body       (BODY) 
    of the text. 

    Regards,       (OUTRO) 
    X 

    *****DISCLAIMER*****    (POST EMAIL DISCLAIMER) 
    THIS EMAIL IS CONFIDENTIAL 
    IF YOU ARE NOT THE INTENDED RECIPIENT PLEASE DELETE THIS EMAIL""" 

y = [s.strip() for s in email.splitlines()] 

print(y) 
+0

감사 @MattR,하지만이 방법으로 나는 수동으로 _m_과 _N_ 모든 이메일 다릅니다 _n_'th 선 후 _m_'th 라인 전에 모든 라인과 모든 행을 삭제해야합니다. 그래서 이것은 실현 가능하지 않습니다. 나는 nltk를 사용할 필요가 없다. 주요 목표는 BODY 섹션을 제외한 모든 것을 지우는 것이다. – killerT2333

+0

@KillianTattan 어떻게 프로그래밍 방식으로 바디 섹션을 식별할지는 모르겠다. 각 이메일이 다를 것이라고 언급했듯이. 어떤 것은 BODY 섹션을 두 개 이상 가질 수도 있습니다. 내 유일한 생각은 신체 섹션을 식별하는 몇 가지 통계 모델을 만드는 것입니다 ...하지만 그건 시간이 좀 걸릴 것입니다. 필요성의 심각성에 따라 다릅니다. – MattR

+0

줄 단위로 구분하고 순진한 베이를 사용하여 각 줄을 분류하고 필요할 경우 제거 할 수 있지만 너무 많은 시간이 걸릴 수 있습니다. texttiling은 이미 내가 이해할 수있는 것에서 훨씬 더 정교한 방식으로 이것을 수행한다. 함수를 작동 시키면됩니다! 도움 주셔서 감사합니다 @ MarkR – killerT2333