如何解决如何使用python将维基百科页面拆分为段落?
我使用 Python 维基百科库来提取维基百科页面的内容。我想处理此内容的每个段落(例如计算每个段落的字数)。将维基百科内容拆分为段落的最佳方法是什么?
import wikipedia as wikipedia
def getPage(title):
content = wikipedia.page(title).content
#for each paragraph in content do:
#...
解决方法
糟糕的方式
wikipedia 图书馆不提供此类信息。
在这个例子中可以看到返回的页面内容不包含大部分布局元素:
import wikipedia
print(wikipedia.page("New York City").content)
“[...] 和体育。纽约是联合国总部所在地,是重要的国际外交中心。位于世界上最大的天然港口之一,[...]”
虽然肯定有它们的暗示,但解析起来很乏味:
- 像上面这样的一些段落拆分在上一段的最后一段之后没有空格;
- 标题使用
== MyTitle ==\n
之类的符号; - 打印换行符。
定义的维基百科部分
如果您正在寻找定义的部分,请尝试 wikipediaapi 库,它更活跃、更完整。
有了它,您可以轻松获取部分:
import wikipediaapi
page_py = wikipediaapi.Wikipedia('en').page('New_York_City')
print(page_py.sections[0].text)
“1664 年,这座城市以约克公爵的名字命名,[...] 从荷兰人手中夺取了它。”
这种方法为您提供非常干净的文本,但无法识别部分中的段落。
HTML 段落
但是,如果您要查找定义为 <p>...</p>
的段落,则需要解析 html 并进行一些清理。
这是实现这一目标的一种方法(使用 BeautifulSoup4):
import bs4
import requests
import unicodedata
import re
def get_paragraphs(page_name):
r = requests.get('https://en.wikipedia.org/api/rest_v1/page/html/{0}'.format(page_name))
soup = bs4.BeautifulSoup(r.content)
html_paragraphs = soup.find_all('p')
for p in html_paragraphs:
cleaned_text = re.sub('(\[[0-9]+\])','',unicodedata.normalize('NFKD',p.text)).strip()
if cleaned_text:
yield cleaned_text
print(list(get_paragraphs('New_York_City'))[0])
“纽约市 (NYC),通常简称为纽约,是美国人口最多的城市。[...] 作为联合国总部所在地,纽约是重要的国际外交中心.”
尽管清理并不完美,但这种方法可能是最好的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。