【问题标题】:Wikipedia disambiguation error维基百科消歧错误
【发布时间】:2014-11-14 19:15:37
【问题描述】:

我最近一直在使用维基百科模块来确定一个随机的维基百科页面。

我一直在用非常大的单词列表和 random.choice() 模块来做这个:

words=open("words.txt","r")
words=words.read()

words=words.split()    

text=random.choice(words)

string=random.choice(wikipedia.search(text))

p = wikipedia.page(string)

系统似乎最常工作,但偶尔会扼杀错误:

Traceback (most recent call last):
  File "/home/will/google4.py", line 25, in <module>
    p = wikipedia.page(string)
  File "/usr/local/lib/python2.7/dist-packages/wikipedia/wikipedia.py", line 276, in page
    return WikipediaPage(title, redirect=redirect, preload=preload)
  File "/usr/local/lib/python2.7/dist-packages/wikipedia/wikipedia.py", line 299, in __init__
    self.__load(redirect=redirect, preload=preload)
  File "/usr/local/lib/python2.7/dist-packages/wikipedia/wikipedia.py", line 393, in __load
    raise DisambiguationError(getattr(self, 'title', page['title']), may_refer_to)
DisambiguationError: "The Scarf" may refer to: 
The Scarf (film)
The Scarf (opera)
Scarf (disambiguation)
Arthur Stewart King Scarf  

无论如何我可以绕过这个?

【问题讨论】:

    标签: python wikipedia-api traceback


    【解决方案1】:

    您可以抓住DisambiguationError 并随机选择其中一个页面。

    try:
        p = wikipedia.page(string)
    except wikipedia.DisambiguationError as e:
        s = random.choice(e.options)
        p = wikipedia.page(s)
    

    请看这里:http://wikipedia.readthedocs.io/en/latest/quickstart.html

    【讨论】:

      【解决方案2】:

      更好的是,使用您可以使用的工具:

      wikipedia.random(pages=1)
      
      Get a list of random Wikipedia article titles.
      
      Note
      
      Random only gets articles from namespace 0, meaning no Category, User talk, or other meta-Wikipedia pages.
      
      Keyword arguments:
      
          pages - the number of random pages returned (max of 10)
      

      (来自https://wikipedia.readthedocs.io/en/latest/code.html#api

      【讨论】:

        【解决方案3】:

        一个明显的方法是下载维基百科页面名称的完整列表并使用它来代替您的单词列表。这对维基百科的搜索引擎也更友好,你不需要获取随机页面(此外,如果你想要一个统一的随机页面,你不能使用搜索引擎)。

        一个不太好但可能更简单的解决方法是让您简单地尝试/排除 DisambiguationError 并重试。

        【讨论】:

          【解决方案4】:

          尝试关注

          p = wikipedia.page(string, auto_suggest=False, redirect=True, preload=False)
          

          设置 auto_suggest=False 应该可以解决其中一个问题。

          【讨论】:

            猜你喜欢
            • 2018-05-27
            • 2017-07-06
            • 1970-01-01
            • 2013-11-13
            • 2019-05-24
            • 1970-01-01
            • 2020-07-08
            • 1970-01-01
            • 2022-10-01
            相关资源
            最近更新 更多