Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用python的字计数器_Python_Python 2.7_Python 3.x_Word Count - Fatal编程技术网

使用python的字计数器

使用python的字计数器,python,python-2.7,python-3.x,word-count,Python,Python 2.7,Python 3.x,Word Count,我用python编写了一个单词计数代码 我想从下一页获取每个单词的文本和频率: 问题是,我的程序给我的字数除以每一节,但我希望它不被分割 请帮我一下 导入请求 从bs4导入BeautifulSoup 进口经营者 def启动(url): 单词列表=[] source_code=requests.get(url).text soup=BeautifulSoup(源代码,“html.parser”) 对于soup.findAll('font',{'class':'tk4l')中的圣经文本: con

我用python编写了一个单词计数代码

我想从下一页获取每个单词的文本和频率:

问题是,我的程序给我的字数除以每一节,但我希望它不被分割

请帮我一下


导入请求
从bs4导入BeautifulSoup
进口经营者
def启动(url):
单词列表=[]
source_code=requests.get(url).text
soup=BeautifulSoup(源代码,“html.parser”)
对于soup.findAll('font',{'class':'tk4l')中的圣经文本:
content=bible\u text.get\u text()
words=content.lower().split()
对于每个单词(大写):
单词列表。追加(每个单词)
清理列表(单词列表)
def清理列表(单词列表):
清理单词列表=[]
对于word\u列表中的word:

symbols=“~!@$%^&*”?>您正在为每一节诗建立一个新的
单词计数
字典,然后只为这一节诗打印
单词计数
。相反,您只需要有一个
word\u count
实例

更新:代码还存在其他问题,另外,您应该使用正则表达式删除所有非字母数字字符,还应该使用
集合。计数器
,因为它使代码缩短了很多,而且,作为一个很好的副作用,让您检索最常见的单词:

import requests
import re
from bs4 import BeautifulSoup
from collections import Counter


def parse(url):
    html = requests.get(url).text
    soup = BeautifulSoup(html, "html.parser")
    count = Counter()
    for bible_text in soup.findAll('font', {'class': 'tk4l'}):
        text = re.sub("[^\w0-9 ]", "", bible_text.get_text().lower())
        count.update(text.split(" "))
    return count

word_count = parse('http://www.holybible.or.kr/B_NIV/cgi/bibleftxt.php?VR=NIV&VL=1&CN=1&CV=99')
print(word_count.most_common(10))
输出:

[('the', 83), ('and', 71), ('god', 30), ('was', 29), ('to', 22), ('it', 17), ('of', 16), ('there', 16), ('that', 15), ('in', 15)]

谢谢,但是为什么要避免全局单词计数呢?这通常是一种不好的做法,请参见例如。在您的示例中,一旦开始使用线程来加速,您可能会遇到问题。现在,似乎每个单词的频率都添加到了已经显示的相同单词的频率之上。例如,假设“父亲”一词出现在第2节,另一个“父亲”出现在第5节。然后,它给了我3个“父亲”第2节[父亲]第3节[父亲]第4节[父亲]第5节[父亲,父亲]——所以总共5个有点难以解释,但是数字不准确……我不明白。你的问题就是这么说的,不是吗?“我的程序给我的字数除以每一节,但我希望它是不可分割的。”,所以你想要一个总的字数,比如说“父亲”在所有的节中求和,不是吗?嗯。。我是说。。。如果“父”出现在第2节和第5节。那应该是父亲2,但它给了我父亲5。就像第2节[父亲]第3节[父亲]第4节[父亲]第5节[父亲,父亲]。。。
[('the', 83), ('and', 71), ('god', 30), ('was', 29), ('to', 22), ('it', 17), ('of', 16), ('there', 16), ('that', 15), ('in', 15)]