Вопрос:

Как подсчитать количество предложений, слов и символов в файле?

python nltk

10333 просмотра

7 ответа

155 Репутация автора

Я написал следующий код для токенизации входного абзаца, который приходит из файла samp.txt. Кто-нибудь может мне помочь найти и напечатать количество предложений, слов и символов в файле? Я использовал NLTK в Python для этого.

>>>import nltk.data
>>>import nltk.tokenize
>>>f=open('samp.txt')
>>>raw=f.read()
>>>tokenized_sentences=nltk.sent_tokenize(raw)
>>>for each_sentence in tokenized_sentences:
...   words=nltk.tokenize.word_tokenize(each_sentence)
...   print each_sentence   #prints tokenized sentences from samp.txt
>>>tokenized_words=nltk.word_tokenize(raw)
>>>for each_word in tokenized_words:
...   words=nltk.tokenize.word_tokenize(each_word)
...   print each_words      #prints tokenized words from samp.txt
Автор: aks Источник Размещён: 22.02.2011 05:54

Ответы (7)


-3 плюса

1458 Репутация автора

Там уже есть программа для подсчета слов и символов wc...

Автор: Max E. Размещён: 22.02.2011 06:01

0 плюса

44131 Репутация автора

  • Персонажи легко посчитать.
  • Абзацы обычно тоже легко подсчитать. Всякий раз, когда вы видите два последовательных перевода строки, у вас, вероятно, есть абзац. Вы можете сказать, что перечисление или неупорядоченный список является абзацем, даже если их записи могут быть разделены двумя символами новой строки. За заголовком или заголовком тоже могут следовать две новые строки, даже если они явно не являются абзацами. Также рассмотрим случай с одним абзацем в файле, за которым следуют одна или ни одна новая строка.
  • Приговоры хитры. Вы можете согласиться на точку, восклицательный знак или вопросительный знак, за которым следует пробел или конец файла. Это сложно, потому что иногда двоеточие обозначает конец предложения, а иногда - нет. Обычно, когда это происходит, следующий непробельный символ будет заглавным, в случае английского. Но иногда нет; например, если это цифра. А иногда открытая скобка отмечает конец предложения (но это спорно, так как в этом случае).
  • Слова тоже хитры. Обычно слова отделяются пробелами или знаками препинания. Иногда тире отделяет слово, иногда нет. Например, в случае с дефисом.

Для слов и предложений вам, вероятно, потребуется четко указать ваше определение предложения, а также слово и программу для этого.

Автор: wilhelmtell Размещён: 22.02.2011 06:06

0 плюса

3198 Репутация автора

Не на 100% правильно, но я только что попробовал. Я не учел все пункты @wilhelmtell. Я пробую их, когда успею ...

if __name__ == "__main__":
   f = open("1.txt")
   c=w=0
   s=1
   prevIsSentence = False
   for x in f:
      x = x.strip()
      if x != "":
        words = x.split()
        w = w+len(words)
        c = c + sum([len(word) for word in words])
        prevIsSentence = True
      else:
        if prevIsSentence:
           s = s+1
        prevIsSentence = False

   if not prevIsSentence:
      s = s-1
   print "%d:%d:%d" % (c,w,s)

Здесь 1.txt - имя файла.

Автор: Poorna Размещён: 22.02.2011 06:24

7 плюса

64231 Репутация автора

Попробуйте это так (эта программа предполагает, что вы работаете с одним текстовым файлом в каталоге, указанном dirpath):

import nltk
folder = nltk.data.find(dirpath)
corpusReader = nltk.corpus.PlaintextCorpusReader(folder, '.*\.txt')

print "The number of sentences =", len(corpusReader.sents())
print "The number of patagraphs =", len(corpusReader.paras())
print "The number of words =", len([word for sentence in corpusReader.sents() for word in sentence])
print "The number of characters =", len([char for sentence in corpusReader.sents() for word in sentence for char in word])

Надеюсь это поможет

Автор: inspectorG4dget Размещён: 22.02.2011 06:38

1 плюс

163 Репутация автора

С nltk вы также можете использовать FreqDist (см. O'Reillys Book Ch3.1 )

И в вашем случае:

import nltk
raw = open('samp.txt').read()
raw = nltk.Text(nltk.word_tokenize(raw.decode('utf-8')))
fdist = nltk.FreqDist(raw)
print fdist.N()
Автор: TheIdealis Размещён: 20.12.2014 02:43

1 плюс

176 Репутация автора

Для чего это стоит, если кто-то приходит сюда. Это касается всего того, что задал вопрос ОП, думаю. Если использовать textstatпакет, считать предложения и символы очень легко. Существует определенное значение для пунктуации в конце каждого предложения.

import textstat

your_text = "This is a sentence! This is sentence two. And this is the final sentence?"
print("Num sentences:", textstat.sentence_count(your_text))
print("Num chars:", textstat.char_count(your_text, ignore_spaces=True))
print("Num words:", len(your_text.split()))
Автор: salvu Размещён: 21.08.2017 08:14

0 плюса

11 Репутация автора

Единственный способ , вы можете решить эту проблему путем создания программы AI , который использует N atural L anguage P rocessing , который не очень легко сделать.

Входные данные:

«Это параграф о машине Тьюринга. Д-р Аллан Тьюринг изобрел машину Тьюринга. Она решила проблему, которая имеет изменение на 0,1%».

Оформить заказ OpenNLP

https://sourceforge.net/projects/opennlp/

http://opennlp.apache.org/

Автор: Karlo DG Размещён: 03.06.2019 07:58
Вопросы из категории :
32x32