2016-10-03 76 views
0

我想用nltk.sent_tokenize將一些客戶的評論拆分爲句子。我已經嘗試解決一些使用下面的代碼的問題:使用nltk.sent_tokenize分割句子,它不提供正確的結果

comment = comment.replace('?', '? ').replace('!', '! ').replace('..','.').replace('.', '. ') 

但我不知道如何解決以下幾個問題:

  1. 客戶使用的幾個"."一些句子之後。例如:

    Think tool is a huge factor in this....i have only 
    
  2. 顧客使用的幾個"!"一些句子後,如auditory subject everyday!!!!!

  3. 它們中的一些在句子的結尾使用"!""."組合。

  4. 因爲我已經習慣replace('.', '. '),它還導致以下問題:

    體重增加(20lbs.),被分至(20lbs.)

什麼建議嗎?我正在使用Python。

+0

完全自由形式的文本是非常有問題的,所以不可能只有一組靜態嘗試的修復程序在任何地方都能正常工作。但是,您所描述的問題可以通過將重複標點符號的運行減少爲單個實例來解決,然後在添加空格之後添加空格,然後在關閉括號之前刪除空格。 – tripleee

+0

@tripleee,謝謝!你能給出一個解決方案,我可以減少重複標點的數量,比如「。」。要麼 」!」。 ? – Mary

+1

用正則表達式足夠簡單。 're.sub(r'([,。;:!?])\ 1+',r'\ 1','hello .....你好嗎')' – tripleee

回答

0

嘗試使用Punkt Sentence Tokenizer。它是預先訓練有效地分割句子,並且可以很容易地醃製到您的代碼中。

+0

謝謝!我認爲對於Punkt Sentence Tokenizer,我需要訓練集和測試集。我有220個客戶對產品的評論,你是否建議,我將220評論分爲訓練和測試集,然後用它來分割句子? – Mary

+0

@Mary如果你喜歡,你可以訓練Punkt Sentence Tokenizer,但你也可以在預訓練版本中醃製,例如:'psenttokenizer = nltk.data.load('tokenizers/punkt/english.pickle')'。然後,您可以在此psenttokenizer對象上調用傳遞文本作爲參數的tokenize函數。 – YashTD