Как подсчитать количество предложений, слов и символов в файле? - PullRequest
6 голосов
/ 22 февраля 2011

Я написал следующий код для токенизации входного абзаца из файла 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

Ответы [ 7 ]

7 голосов
/ 22 февраля 2011

Попробуйте это так (эта программа предполагает, что вы работаете с одним текстовым файлом в каталоге, указанном 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])

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

2 голосов
/ 20 декабря 2014

С помощью nltk вы также можете использовать FreqDist (см. Книга О'Рейли 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()
1 голос
/ 21 августа 2017

Для чего стоит, если кто-то придет сюда.Это касается всего того, что задал вопрос ОП, я думаю.Если использовать пакет 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()))
0 голосов
/ 03 июня 2019

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

Ввод:

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

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

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

http://opennlp.apache.org/

0 голосов
/ 22 февраля 2011

Не на 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 - имя файла.

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

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

0 голосов
/ 22 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...