文字列内の単語の出現回数を見つけようとしています。
word = "dog"
str1 = "the dogs barked"
以下を使用して出現回数をカウントしました。
count = str1.count(word)
問題は、完全一致が欲しいということです。したがって、この文のカウントは 0 になります。それは可能ですか?
効率を重視する場合:
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
単語の境界 ( \w
aka[a-zA-Z0-9_]
とその他の間の遷移) で一致する正規表現フラグを使用します。
ASCII 文字セット以外の言語について心配する必要がある場合は、正規表現を調整して、それらの言語の単語以外の文字に適切に一致させる必要があるかもしれませんが、多くのアプリケーションでは、これは非常に複雑になり、他の多くの場合、Unicode と/または正規表現のロケール フラグで十分です。
を使用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
リスト内包表記を使用します。
>>> 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()
文中のすべての単語のリストを返します。次に、リスト内包表記を使用して、単語が文に何回出現するかを数えます。
import re
word = "dog"
str = "the dogs barked"
print len(re.findall(word, str))
文を単語に分割する必要があります。あなたの例では、それを行うことができます
words = str1.split()
しかし、実際の単語の使用には、句読点も処理する、より高度なものが必要です。ほとんどの西洋言語では、str1.split()
.
これは単純なケースでは英語でも機能しますが、「I'm」は「I」と「m」の 2 つの単語に分割されることに注意してください。実際には「I」と「am」に分割する必要があります。しかし、これはこのアプリケーションではやり過ぎかもしれません。
アジア言語や英語の実際の使用法などの他のケースでは、単語分割を行うライブラリを使用することをお勧めします。
次に、単語のリストがあり、次のことができます
count = words.count(word)
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
これを行う別の方法は、文字列をトークン化する (単語に分割する) ことです。
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
以下は、目的の単語を新しい単語に置き換え、さらに出現回数を指定できる簡単な例です。
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 番目と最後は発生回数です。