2017-04-03 133 views
0

我發現這個Split Text into paragraphs NLTK - usage of nltk.tokenize.texttiling?解釋瞭如何將文本輸入到文本中,但是我無法實際返回由段落/主題更改標記的文本,如文本http://www.nltk.org/api/nltk.tokenize.html下所示。如何使用NLTK將文本分割爲段落nltk.tokenize.texttiling?

當我將我的文本輸入到文本文件中時,我得到的是未經過處理的文本,但是作爲列表,這對我來說沒有用處。

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 

我已經是遵循這個基本結構

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 

如果我們把這個郵件字符串s,它看起來像

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" 

電子郵件我想要做的就是迴歸這5段/字符串s - LOGISTICS,INTRO,BODY,OUTRO,POST電子郵件免責聲明 - 單獨所以我可以刪除所有內容,但T的BODY分機。如何使用nltk文本分別返回這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_'th行之前的所有行和所有行_n_'th行,其中_m_和_n_爲每封電子郵件後變化。所以這似乎不可行。我不必使用nltk,主要目標是刪除除BODY部分以外的所有內容 – killerT2333

+0

@KillianTattan不知道如何以編程方式識別正文部分..正如您所提到的,每封電子郵件都會有所不同。有些甚至可能有多個BODY部分。我唯一的想法是創建一些統計模型來識別身體部位......但這需要一些時間。取決於需求的嚴重程度。 – MattR

+0

我可以按行分割並使用樸素貝葉分類每一行並在需要時將其刪除,但這會花費太多時間。 texttiling已經以我所能理解的更復雜的方式做到了這一點。我只需要讓這個功能起作用!感謝您的幫助@MarkR – killerT2333