试图计算字符串中的单词

Posted

技术标签:

【中文标题】试图计算字符串中的单词【英文标题】:Trying to count words in a string 【发布时间】:2013-07-04 16:16:15 【问题描述】:

我正在尝试分析字符串的内容。如果单词中有标点符号,我想用空格替换它们。

例如,如果 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))

【问题讨论】:

你过于复杂了。您可以使用普通的 for 循环来迭代字符串。 d 是字符串的单个字符,not 和索引。而且您没有调用.isalnum() 方法,只是引用它。并使用if not 进行阴性测试,而不是!= True 为什么不能导入任何库...? 有人告诉我不要使用它。使用 != True 有什么问题? @HarryHarry 这不是 Pythonic。并且仅仅因为您使用的是 Python 3,并不意味着您不能导入任何库。如果这是真的,那么 Python 3 可能就不会发布了。 【参考方案1】:

基于简单循环的解决方案:

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']

【讨论】:

正则表达式如何成为更好的解决方案,是否更快? @IgnacioVazquez-Abrams 你说得对(re.sub 然后str.split 嗯!!),我猜re.split 是一个更好的选择。 >>> len(re.findall(r'\b\w+\b', 'Johnny.Appleseed!is:a*good&farmer')) 6 如果你要使用re.split,那么我会选择re.split('[\W]+', strs)...但我更喜欢@IgnacioVazquez-Abrams 所示的更直接的re.findall @JonClements 我认为应该是'[\W_]+'?无论如何感谢有用的提示。 :) 我应该努力研究正则表达式。【参考方案2】:

这是一种不需要导入任何库的单行解决方案。 它用空格替换非字母数字字符(如标点符号),然后用splits 替换字符串。

灵感来自“Python strings split with multiple separators”

>>> 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

【讨论】:

【参考方案3】:

试试这个:它使用 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

【讨论】:

【参考方案4】:

使用集合中的 Counter 怎么样?

import re
from collections import Counter

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

【讨论】:

【参考方案5】:
for ltr in ('!', '.', ...) # insert rest of punctuation
     stringss = strings.replace(ltr, ' ')
return len(stringss.split(' '))

【讨论】:

【参考方案6】:

我知道这是一个老问题,但是……这个怎么样?

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(" ")))

【讨论】:

【参考方案7】:
#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")

【讨论】:

以上是关于试图计算字符串中的单词的主要内容,如果未能解决你的问题,请参考以下文章

我的逻辑有啥问题?尝试计算文件中包含特定字符的单词数量

我如何创建将单词添加到字符串python的循环

计算文件中与 String [ ] 中的单词匹配的单词

计算字符串中的单词

如何计算文本字符串中的单词?

如何提取 MySQL 字符串中的第 n 个单词并计算单词出现次数?