2013-12-02 2 views
0

У меня есть следующий код:Длина списка формируется из предложений пункта

def splitParagraphIntoSentences(paragraph): 
    import re 
    sentenceEnders = re.compile('[.!?]') 
    sentenceList = sentenceEnders.split(paragraph) 
    return sentenceList 

sentenceList=splitParagraphIntoSentences (u"""I have a bicycle. I want the car. 
""") 
print len(sentenceList) 

Python будет возвращать, что длина из sentencelist равно 3. На самом деле есть только два предложения. Я знаю, что это так, потому что «.» в конце второго предложения. Каков наилучший способ правильно учить предложения счетчика программ, не удаляя «.». с конца второго предложения?

Спасибо

+1

'LEN (re.findall (г '[.!?],«У меня есть велосипед. Я хочу машину. »))' – falsetru

ответ

0

Вместо расщепления, сосчитать концы:

len(sentenceEnders.findall(paragraph)) 

или вычитать 1 по счету для пустой строки после последнего предложения раскола:

len(splitParagraphIntoSentences(paragraph)) - 1 

или возвращающие отфильтрованный список, удаляющий пустые предметы:

return filter(None, sentenceList) 

или, при использовании Python 3 (где filter() возвращает генератор):

return [s for s in sentenceList if s] 
+0

Взяв один, вы получите нуль для пустых строк, а также потенциально допустимых предложений, которые просто не имеют «.» Или подобных. Если OP чисто хотел исправить ' re.split', то, возможно, добавьте '(?! $)' –

+0

Но как вы создаете правильный список из абзаца. Я имею в виду список, содержащий только предложения. – user2904150

Смежные вопросы