web-dev-qa-db-ja.com

python 3で文字列内の単語の出現を見つける

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

Word = "dog"
str1 = "the dogs barked"

以下を使用して発生をカウントしました。

count = str1.count(Word)

問題は、完全一致が必要なことです。したがって、この文の数は0になります。それは可能ですか?

17
lost9123193

効率を上げる場合:

_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_正規表現フラグを使用します。これはWordの境界(_\w_ a.k.a _[a-zA-Z0-9_]_とその他の遷移)に一致します。

ASCII文字セット以外の言語について心配する必要がある場合は、それらの言語のWord以外の文字に適切に一致するように正規表現を調整する必要があるかもしれませんが、多くのアプリケーションではこれは複雑すぎます。他の多くの場合、正規表現にUnicodeフラグやロケールフラグを設定するだけで十分です。

33
Amber

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
_
10
grc

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

_>>> 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()は、文内のすべての単語のリストを返します。次に、リスト内包表記を使用して、Wordが文に出現する回数をカウントします。

5
TerryA
import re

Word = "dog"
str = "the dogs barked"
print len(re.findall(Word, str))
4
Aaron

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

_words = str1.split()
_

しかし、実際のWordの使用には、句読点も処理するより高度なものが必要です。ほとんどの西洋言語では、str1.split()を実行する前に、すべての句読点をスペースで置き換えることで回避できます。

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

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

それからあなたは言葉のリストを持っています、そしてあなたはすることができます

_count = words.count(Word)
_
3
Lennart Regebro

例を考えてみましょうs = "suvotisuvojitsuvo"。 「suvo」と「suvojit」の個別のカウントを数えたくない場合は、count()メソッドを使用します...個別にカウントします。つまり、suvojitを数えないでください。

suvocount = s.count("suvo") // #output: 3
suvojitcount = s.count("suvojit") //# output : 1

次に、suvojitカウントから否定する必要がある孤独なsuvoカウントを見つけます。

lonelysuvo = suvocount - suvojicount //# output: 3-1 -> 2
0
Maxx Selva K

文字列内の特定のWordの正確な出現回数を検索する必要があり、カウント関数を使用したくない場合は、次の方法を使用できます。

text = input("Please enter the statement you want to check: ")
Word = input("Please enter the Word you want to check in the statement: ")

# n is the starting point to find the Word, and it's 0 cause you want to start from the very beginning of the string.
n = 0

# position_Word is the starting Index of the Word in the string
position_Word = 0
num_occurrence = 0

if Word.upper() in text.upper():
    while position_Word != -1:
        position_Word = text.upper().find(Word.upper(), n, len(text))

        # increasing the value of the stating point for search to find the next Word
        n = (position_Word + 1)

        # statement.find("Word", start, end) returns -1 if the Word is not present in the given statement. 
        if position_Word != -1:
            num_occurrence += 1

    print (f"{Word.title()} is present {num_occurrence} times in the provided statement.")

else:
    print (f"{Word.title()} is not present in the provided statement.")
0
wgetDJ

以下は、必要な単語を新しい単語に置き換えて、必要な回数だけ出現させる簡単な例です。

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つ目は、new_stringです。これは、search_stringを置き換えます。 3番目と最後は発生数です。

0
abhay goyan

これはコメントの助けを借りた私の解決策です:

Word = str(input("type the french Word chiens in english:"))
str1 = "dogs"
times = int(str1.count(Word))
if times >= 1:
    print ("dogs is correct")
else:
    print ("your wrong")
0
roger
    #counting the number of words in the text
def count_Word(text,Word):
    """
    Function that takes the text and split it into Word
    and counts the number of occurence of that Word
    input: text and Word
    output: number of times the Word appears
    """
    answer = text.split(" ")
    count = 0
    for occurence in answer:
        if Word == occurence:
            count = count + 1
    return count

sentence = "To be a programmer you need to have a sharp thinking brain"
Word_count = "a"
print(sentence.split(" "))
print(count_Word(sentence,Word_count))

#output
>>> %Run test.py
['To', 'be', 'a', 'programmer', 'you', 'need', 'to', 'have', 'a', 'sharp', 'thinking', 'brain']
2
>>> 

テキストとWordの文である2つの入力を受け取る関数を作成します。文のテキストをリスト内の単語のセグメントに分割し、カウントする単語がセグメント化された単語に存在するかどうかを確認し、発生を関数の戻り値としてカウントします。

0

RegularExpressionが必要ない場合は、これをtrickで行うことができます。

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
0
HaSeeB MiR