2013-10-16 19 views
35

文章中の単語を数える方法は?私はPythonを使用しています。文章中の単語数を数えるには?

string = "I  am having a very nice [email protected]$  day. " 

7つの言葉のようになります。

は例えば、私は、文字列を持っているかもしれません。私は、数字や記号が含まれている場合と同様に、各単語の前後にランダムな量のスペースに問題があります。引数なし

+2

である、あなたは正規表現を変更することができます。 '\ w'は' [a-zA-Z0-9] 'にマッチします。次に、ユースケースが何であるかを定義する必要があります。 「私は良いですか?」とはどうなりますか?それは2単語か3単語でしょうか? – karthikr

答えて

56

str.split()空白文字の実行に分割します。

>>> s = 'I am having a very nice day.' 
>>> 
>>> len(s.split()) 
7 

リンクドキュメントから:

9月が指定またはNoneで、異なる分割アルゴリズムが適用されていない場合:連続した空白の連続は1つの区切り文字とみなされ、文字列の先頭または末尾に空白がある場合は、先頭または末尾に空の文字列は含まれません。

+7

これの1つの(非常にマイナーな)欠点は、単語としてカウントされる句読点グループを持つことができるということです。たとえば、「私はとても素敵な一日を過ごしています。少なくとも、私はいました」と言いますと、あなたは単語として数えられます。 OPの "単語"の定義に応じて、 "isalnum"が役立つかもしれません。 – DSM

+0

これは正規表現より速いと思われます –

33

あなたはregex.findall()を使用することができます。

import re 
line = " I am having a very nice day." 
count = len(re.findall(r'\w+', line)) 
print (count) 
+0

ええ、私は通常、正規表現を避けることができますが、これはかなり良いユースケースのようです。 –

+4

+1を使用する場合は+1、string.split()の場合はi [i]の場合はi [isalnum()]の場合はそれよりも本当に良いです。 – JadedTuna

+0

十進数のようなものを扱うために '\ S + ''それは2.5倍速い ''の数字です。 – Emadpres

1

[OK]を、ここでこれを行うための私のバージョンです。私はあなたの出力が7であることに気付きました。つまり、特殊文字と数字を数えたくありません。そこでここでは、正規表現パターンです:[a-zA-Z_]は、それが一致することを意味

re.findall("[a-zA-Z_]+", string) 

任意の文字a-z(小文字)とA-Z(大文字)beetwen。


スペースについて。余分なスペースをすべて削除するには、次のようにします。

string = string.rstrip().lstrip() # Remove all extra spaces at the start and at the end of the string 
while " " in string: # While there are 2 spaces beetwen words in our string... 
    string = string.replace(" ", " ") # ... replace them by one space! 
2

これは正規表現を使用した簡単な単語カウンターです。スクリプトにはループが含まれています。

#word counter using regex 
import re 
while True: 
    string =raw_input("Enter the string: ") 
    count = len(re.findall("[a-zA-Z_]+", string)) 
    if line == "Done": #command to terminate the loop 
     break 
    print (count) 
print ("Terminated") 
-1
def wordCount(mystring): 
     tempcount = 0 
     count = 1 

     try: 
      for character in mystring: 
       if character == " ": 
        tempcount +=1 
        if tempcount ==1: 
         count +=1 

        else: 
         tempcount +=1 
       else: 
        tempcount=0 

      return count 

     except Exception: 
      error = "Not a string" 
      return error 

    mystring = "I am having a very nice [email protected]$  day."   

    print(wordCount(mystring)) 

出力は数字を収容するために8

+0

出力は11.もう一度チェックしてください。 –

+0

ありがとうございました。 –

関連する問題