web-dev-qa-db-ja.com

文字列内の単語を数えようとしています

文字列の内容を分析しようとしています。 Wordに句読点が混在している場合は、スペースで置き換えます。

たとえば、Johnny.Appleseed!is:a * good&farmerが入力として入力された場合、6ワードあると表示されますが、私のコードでは0ワードとしてしか認識されません。間違った文字を削除する方法がわかりません。

参考:python 3を使用しています。また、ライブラリをインポートできません。

string = input("type something")
stringss = string.split()

    for c in range(len(stringss)):
        for d in stringss[c]:
            if(stringss[c][d].isalnum != True):
                #something that removes stringss[c][d]
                total+=1
print("words: "+ str(total))
9
Harry Harry

シンプルなループベースのソリューション:

strs = "Johnny.Appleseed!is:a*good&farmer"
lis = []
for c in strs:
    if c.isalnum() or c.isspace():
        lis.append(c)
    else:
        lis.append(' ')

new_strs = "".join(lis)
print new_strs           #print 'Johnny Appleseed is a good farmer'
new_strs.split()         #prints ['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer']

より良いソリューション:

regexの使用:

>>> import re
>>> from string import punctuation
>>> strs = "Johnny.Appleseed!is:a*good&farmer"
>>> r = re.compile(r'[{}]'.format(punctuation))
>>> new_strs = r.sub(' ',strs)
>>> len(new_strs.split())
6
#using `re.split`:
>>> strs = "Johnny.Appleseed!is:a*good&farmer"
>>> re.split(r'[^0-9A-Za-z]+',strs)
['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer']
15

ライブラリをインポートする必要のない1行のソリューションを次に示します。
これは、英数字以外の文字(句読点など)をスペースで置き換え、次に文字列をsplitsします。

" 複数のセパレータで分割されたPython文字列 からインスピレーションを得た

>>> s = 'Johnny.Appleseed!is:a*good&farmer'
>>> words = ''.join(c if c.isalnum() else ' ' for c in s).split()
>>> words
['Johnny', 'Appleseed', 'is', 'a', 'good', 'farmer']
>>> len(words)
6
11
Prashant Kumar

コレクションのCounterを使用するのはどうですか?

import re
from collections import Counter

words = re.findall(r'\w+', string)
print (Counter(words))
3
sweet_sugar

これを試してください:reを使用してWord_listを解析し、Word:appearancesの辞書を作成します

import re
Word_list = re.findall(r"[\w']+", string)
print {Word:word_list.count(Word) for Word in Word_list}
3
Dotan
for ltr in ('!', '.', ...) # insert rest of punctuation
     stringss = strings.replace(ltr, ' ')
return len(stringss.split(' '))
1
Rushy Panchal

これは古い質問であることは知っていますが、これはどうですか?

string = "If Johnny.Appleseed!is:a*good&farmer"

a = ["*",":",".","!",",","&"," "]
new_string = ""

for i in string:
   if i not in a:
      new_string += i
   else:
      new_string = new_string  + " "

print(len(new_string.split(" ")))
1
TMoover
#Write a python script to count words in a given string.
 s=str(input("Enter a string: "))
 words=s.split()
 count=0
  for Word in words:
      count+=1

  print(f"total number of words in the string is : {count}")
0
alien ware