python如何逐行计算html中的单词数

时间:2016-11-10 16:58:19

标签: python html beautifulsoup nltk tokenize

我希望执行简单的标记化来逐行计算html中的单词数,除了<a>标记和<a>标记之间的单词之间的单词将单独计数

可以nltk这样做吗?或者有任何图书馆可以做到这一点?

例如: 这个html代码

<div class="side-article txt-article">
<p><strong>BATAM.TRIBUNNEWS.COM, BINTAN</strong> - Tradisi pedang pora mewarnai serah terima jabatan pejabat di <a href="http://batam.tribunnews.com/tag/polres/" title="Polres">Polres</a> <a href="http://batam.tribunnews.com/tag/bintan/" title="Bintan">Bintan</a>, Senin (3/10/2016).</p>
<p>Empat perwira baru Senin itu diminta cepat bekerja. Tumpukan pekerjaan rumah sudah menanti di meja masing masing.</p>
<p>Para pejabat tersebut yakni AKP Adi Kuasa Tarigan, Kasat Reskrim baru yang menggantikan AKP Arya Tesa Brahmana. Arya pindah sebagai Kabag Ops di <a href="http://batam.tribunnews.com/tag/polres/" title="Polres">Polres</a> Tanjungpinang.</p>

我希望输出

WordsCount : 0 LinkWordsCount : 0
WordsCount : 21 LinkWordsCount : 2
WordsCount : 19 LinkWordsCount : 0
WordsCount : 25 LinkWordsCount : 2

WordsCount是除<a>标记之间的文字之外的每一行中的字数。如果有一个单词出现两次,它将被计为两个。 LinkWordsCount是<a>标记之间的字数。

所以除了<a>标记之外,如何逐行计数,<a>标记之间的单词将单独计算。

谢谢。

2 个答案:

答案 0 :(得分:0)

迭代原始HTML的每一行,只需在每行中搜索链接。

在下面的示例中,我使用了一种非常天真的方式来计算单词数 - 用空格分隔行(这样-计为单词,BATAM.TRIBUNNEWS.COM计为单个单词)

from bs4 import BeautifulSoup

html = """
<div class="side-article txt-article">
<p><strong>BATAM.TRIBUNNEWS.COM, BINTAN</strong> - Tradisi pedang pora mewarnai serah terima jabatan pejabat di <a href="http://batam.tribunnews.com/tag/polres/" title="Polres">Polres</a> <a href="http://batam.tribunnews.com/tag/bintan/" title="Bintan">Bintan</a>, Senin (3/10/2016).</p>
<p>Empat perwira baru Senin itu diminta cepat bekerja. Tumpukan pekerjaan rumah sudah menanti di meja masing masing.</p>
<p>Para pejabat tersebut yakni AKP Adi Kuasa Tarigan, Kasat Reskrim baru yang menggantikan AKP Arya Tesa Brahmana. Arya pindah sebagai Kabag Ops di <a href="http://batam.tribunnews.com/tag/polres/" title="Polres">Polres</a> Tanjungpinang.</p>
"""

soup = BeautifulSoup(html.strip(), 'html.parser')

for line in html.strip().split('\n'):
    link_words = 0

    line_soup = BeautifulSoup(line.strip(), 'html.parser')
    for link in line_soup.findAll('a'):
        link_words += len(link.text.split())

    # naive way to get words count
    words_count = len(line_soup.text.split())
    print ('WordsCount : {0} LinkWordsCount : {1}'
           .format(words_count, link_words))

输出:

WordsCount : 0 LinkWordsCount : 0
WordsCount : 16 LinkWordsCount : 2
WordsCount : 17 LinkWordsCount : 0
WordsCount : 25 LinkWordsCount : 1

修改

如果您想从文件中读取HTML,请使用以下内容:

with open(path_to_html_file, 'r') as f:
    html = f.read()

答案 1 :(得分:-1)

我建议尝试使用re

的python中的RegEx

要计算链接词数,请使用计算href = like this one

的正则表达式

RegEx还可以帮助您找到不包含的字词&lt; &GT;通过将它们与空格分开,您将拥有可以使用len并且具有多个单词的数组。

那将是我要走的路。