25

文字列内の単語の出現回数を見つけようとしています。

word = "dog"
str1 = "the dogs barked"

以下を使用して出現回数をカウントしました。

count = str1.count(word)

問題は、完全一致が欲しいということです。したがって、この文のカウントは 0 になります。それは可能ですか?

4

14 に答える 14

43

効率を重視する場合:

import re
count = sum(1 for _ in re.finditer(r'\b%s\b' % re.escape(word), input_string))

これは ( とは異なり) 中間リストを作成する必要がないため、大きな値に対してsplit()効率的に機能します。input_string

また、句読点を正しく処理できるという利点もあります。1句のカウントとして適切に返されます"Mike saw a dog."(一方、引数なしの場合split()はそうではありません)。これは、\b単語の境界 ( \waka[a-zA-Z0-9_]とその他の間の遷移) で一致する正規表現フラグを使用します。

ASCII 文字セット以外の言語について心配する必要がある場合は、正規表現を調整して、それらの言語の単語以外の文字に適切に一致させる必要があるかもしれませんが、多くのアプリケーションでは、これは非常に複雑になり、他の多くの場合、Unicode と/または正規表現のロケール フラグで十分です。

于 2013-06-24T06:09:29.967 に答える
16

を使用str.split()して、文を単語のリストに変換できます。

a = 'the dogs barked'.split()

これにより、リストが作成されます。

['the', 'dogs', 'barked']

次に、次を使用して正確な出現回数をカウントできますlist.count()

a.count('dog')  # 0
a.count('dogs') # 1

句読点を使用する必要がある場合は、正規表現を使用できます。例えば:

import re
a = re.split(r'\W', 'the dogs barked.')
a.count('dogs') # 1
于 2013-06-24T06:10:28.620 に答える
5

リスト内包表記を使用します。

>>> word = "dog"
>>> str1 = "the dogs barked"
>>> sum(i == word for word in str1.split())
0

>>> word = 'dog'
>>> str1 = 'the dog barked'
>>> sum(i == word for word in str1.split())
1

split()文中のすべての単語のリストを返します。次に、リスト内包表記を使用して、単語が文に何回出現するかを数えます。

于 2013-06-24T06:09:12.340 に答える
4
import re

word = "dog"
str = "the dogs barked"
print len(re.findall(word, str))
于 2013-06-24T09:58:30.597 に答える
3

文を単語に分割する必要があります。あなたの例では、それを行うことができます

words = str1.split()

しかし、実際の単語の使用には、句読点も処理する、より高度なものが必要です。ほとんどの西洋言語では、str1.split().

これは単純なケースでは英語でも機能しますが、「I'm」は「I」と「m」の 2 つの単語に分割されることに注意してください。実際には「I」と「am」に分割する必要があります。しかし、これはこのアプリケーションではやり過ぎかもしれません。

アジア言語や英語の実際の使用法などの他のケースでは、単語分割を行うライブラリを使用することをお勧めします。

次に、単語のリストがあり、次のことができます

count = words.count(word)
于 2013-06-24T06:12:10.290 に答える
1

RegularExpressionが必要ない場合は、この巧妙なトリックを実行できます。

word = " is " #Add space at trailing and leading sides.
input_string = "This is some random text and this is str which is mutable"
print("Word count : ",input_string.count(word))
Output -- Word count :  3
于 2019-05-18T19:21:22.430 に答える
0

これを行う別の方法は、文字列をトークン化する (単語に分割する) ことです。

Python 標準ライブラリのcollectionモジュールからCounterを使用

from collections import Counter 

str1 = "the dogs barked"
stringTokenDict = { key : value for key, value in Counter(str1.split()).items() } 

print(stringTokenDict['dogs']) 
#This dictionary contains all words & their respective count 
于 2021-12-05T08:07:12.827 に答える
0

以下は、目的の単語を新しい単語に置き換え、さらに出現回数を指定できる簡単な例です。

import string

def censor(text, word):<br>
    newString = text.replace(word,"+" * len(word),text.count(word))
    print newString

print censor("hey hey hey","hey")

出力は次のようになります。+++ +++ +++

関数の最初のパラメーターは search_string です。2 つ目は、search_string を置き換える new_string です。3 番目と最後は発生回数です。

于 2015-08-05T06:34:53.663 に答える