维基百科消除歧义错误

时间:2014-09-20 08:11:34

标签: python wikipedia-api traceback

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

我一直用很大的单词列表来做这个,而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  

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

3 个答案:

答案 0 :(得分:1)

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

一个不太好但可能更容易修复的问题是你只需尝试/除了DisambiguationError,然后再试一次。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

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

见这里:https://developer.android.com/reference/android/content/Intent.html#FLAG_RECEIVER_FOREGROUND