siznax / wptools

Wikipedia tools (for Humans): easily extract data from Wikipedia, Wikidata, and other MediaWikis
MIT License
574 stars 78 forks source link

Support language variants (simplified Chinese) #26

Closed lisongx closed 8 years ago

lisongx commented 8 years ago

I'm using p = wptools.page(wikibase='Q5094115', lang='zh').get() to get the chinese content of the page, but the content I get from p.extract is traditional Chinese

>>> print p.extract
<p><b>林一峰</b>(英文名:Chet Lam,1976年4月11日<span title="Template:BLP editintro">-</span>),香港土生土長的創作歌手,未受過正統音樂訓練,靠自學而學懂彈結他、作曲、寫詞;除了大量替其他歌手創作及製作外,林成立了兩間工作室:LYFE及思人創作,推出過十多張粵語、國語跟英語專輯,替自己及其他音樂單位舉辦音樂演出。文字方面,林已經推出了7本著作,包括2014年集音樂專輯、旅行故事、中英對照食譜於一身的《慢煮快活》。</p>
<p>林是香港唱作組合at17成員林二汶的哥哥,兩人經常合作演出。</p>

I'm wondering is there a way to get the simplified version of the content from the api, in the https://zh.wikipedia.org/ , you can do this by selecting different chiense flavor

screen shot 2016-10-20 at 1 50 03 pm

Thanks Steve!

siznax commented 8 years ago

Hi, @seansay. As I mentioned in #24, we'll need to select the language code appropriate for each API based on the data currently available, or add the data we want to either Wikidata or a Chinese Wikipedia.

If we want simplified Chinese data from Wikidata (via the Wikidata API), then we probably need to set lang='zh-cn' for get_wikidata. This is somewhat confusing because Wikidata offers some of the same information that is available in Wikipedia. Indeed, Wikidata was seeded from Wikipedia.

Now, if we want simplified Chinese information from Wikipedia (via the MediaWiki API), then we'll have to adjust our get_query and get_parse requests for the desired "flavor".

I'll look more closely at the MediaWiki API, and see how we might adjust our requests for specific language variants.

siznax commented 8 years ago

For clarity, here are some examples of language variant content.

Chet Lam (zh):

林一峰(英文名:Chet Lam,1976年4月11日-),香港土生土長的創作歌手,未受過正統音樂訓練,靠自學而學懂彈結他、作曲、寫詞;除了大量替其他歌手創作及製作外,林成立了兩間工作室:LYFE及思人創作,推出過十多張粵語、國語跟英語專輯,替自己及其他音樂單位舉辦音樂演出。文字方面,林已經推出了7本著作,包括2014年集音樂專輯、旅行故事、中英對照食譜於一身的《慢煮快活》。

Chet Lam (zh-cn):

林一峰(英文名:Chet Lam,1976年4月11日-),香港土生土长的创作歌手,未受过正统音乐训练,靠自学而学懂弹吉他、作曲、写词;除了大量替其他歌手创作及制作外,林成立了两间工作室:LYFE及思人创作,推出过十多张粤语、国语跟英语专辑,替自己及其他音乐单位举办音乐演出。文字方面,林已经推出了7本著作,包括2014年集音乐专辑、旅行故事、中英对照食谱于一身的《慢煮快活》。 林是香港唱作组合at17成员林二汶的哥哥,两人经常合作演出。

Chet Lam (zh-hk):

林一峰(英文名:Chet Lam,1976年4月11日-),香港土生土長的創作歌手,未受過正統音樂訓練,靠自學而學懂彈結他、作曲、寫詞;除了大量替其他歌手創作及製作外,林成立了兩間工作室:LYFE及思人創作,推出過十多張粵語、國語跟英語專輯,替自己及其他音樂單位舉辦音樂演出。文字方面,林已經推出了7本著作,包括2014年集音樂專輯、旅行故事、中英對照食譜於一身的《慢煮快活》。 林是香港唱作組合at17成員林二汶的哥哥,兩人經常合作演出。

Chet Lam (zh-tw):

林一峰(英文名:Chet Lam,1976年4月11日-),香港土生土長的創作歌手,未受過正統音樂訓練,靠自學而學懂彈吉他、作曲、寫詞;除了大量替其他歌手創作及製作外,林成立了兩間工作室:LYFE及思人創作,推出過十多張粵語、國語跟英語專輯,替自己及其他音樂單位舉辦音樂演出。文字方面,林已經推出了7本著作,包括2014年集音樂專輯、旅行故事、中英對照食譜於一身的《慢煮快活》。

Specifically, "Hong Kong native singer-songwriter"

   zh: 香港土生土長的創作歌手
zh-cn: 香港土生土长的创作歌手 (simplified)
zh-hk: 香港土生土長的創作歌手
zh-tw: 香港土生土長的創作歌手
siznax commented 8 years ago

Just want to note here that this is currently an open issue against the RESTBase API: https://phabricator.wikimedia.org/T122942 which would be a good alternative if it is resolved.

siznax commented 8 years ago

This is weird. I tried adding adding Mediawiki API:Option variant=zh-cn:

>>> p = wptools.page('林一峰', lang='zh').get_query()
>>> print p.g_query['query'].replace('&format=json', '') + '&variant=zh-cn'

https://zh.wikipedia.org/w/api.php?action=query&exintro&formatversion=2&inprop=displaytitle|url|watchers&list=random&pithumbsize=240&ppprop=wikibase_item&prop=extracts|images|info|pageimages|pageprops&redirects&rnlimit=1&rnnamespace=0&titles=林一峰&variant=zh-cn

And got this warning in the JSON result:

"warnings": {
    "main": {
        "warnings": "Unrecognized parameter: 'variant'"
    }
},

But the extract appears to have been converted to the zh-cn variant anyway!

"extract": "<p><b>林一峰</b>(英文名:Chet Lam,1976年4月11日<span title=\"Template:BLP editintro\">-</span>),香港土生土长的创作歌手,未受过正统音乐训练,靠自学而学懂弹吉他、作曲、写词;除了大量替其他歌手创作及制作外,林成立了两间工作室:LYFE及思人创作,推出过十多张粤语、国语跟英语专辑,替自己及其他音乐单位举办音乐演出。文字方面,林已经推出了7本著作,包括2014年集音乐专辑、旅行故事、中英对照食谱于一身的《慢煮快活》。</p>\n<p>林是香港唱作组合at17成员林二汶的哥哥,两人经常合作演出。</p>\n<p></p>",

Compare target string:

   zh: 香港土生土長的創作歌手
zh-cn: 香港土生土长的创作歌手 (&variant=zh-cn)
siznax commented 8 years ago

I pushed support for adding &variant={variant} to API requests (d07b3aea9d1cab193c4a91b624a1fea571d1763d):

>>> p = wptools.page(wikibase='Q5094115', lang='zh', variant='zh-cn').get()
Q5094115 (zh)
{
  lang: zh
  variant: zh-cn
  wikibase: Q5094115
}
zh.wikipedia.org (action=wikidata) Q5094115
zh.wikipedia.org (action=wikidata) Q148|Q5
zh.wikipedia.org (action=query) 林一峰
zh.wikipedia.org (action=parse) 252279
林一峰 (zh)
{
  extext: <str(223)> **林一峰**(英文名:Chet Lam,1976年4月11日-),香港土生土长的创作歌手,未...
  ...
}
>>> print p.extext

林一峰(英文名:Chet Lam,1976年4月11日-),香港土生土长的创作歌手,未受过正统音乐训练,靠自学而学懂弹吉他、作曲、写词;除了大量替其他歌手创作及制作外,林成立了两间工作室:LYFE及思人创作,推出过十多张粤语、国语跟英语专辑,替自己及其他音乐单位举办音乐演出。文字方面,林已经推出了7本著作,包括2014年集音乐专辑、旅行故事、中英对照食谱于一身的《慢煮快活》。

However, the warning: "Unrecognized parameter: 'variant'" (noted above) seems to indicate that it is an unsupported/unstable feature.

@seansay, does this work for you?

siznax commented 8 years ago

Uh-oh. I just realized that with this:

>>> p = wptools.page(wikibase='Q5094115', lang='zh', variant='zh-cn').get()

we would be getting zh (traditional Chinese) data from Wikidata, but zh-cn (simplified Chinese) info from Wikipedia.

So we'll need to make sure Wikidata requests respect variant when present.

That should be easy.

siznax commented 8 years ago

I pushed a fix (74d6dce6adc64f6d6d0e439384e6769bb2c0cb8c) which ensures that Wikidata requests also respect variant when given. The invocation above modifies requests as follows:

Wikidata request (&languages=zh-cn):

>>> print p.g_wikidata['query'].replace('&format=json','')

https://www.wikidata.org/w/api.php?action=wbgetentities&formatversion=2&ids=Q5094115&languages=zh-cn&props=info|claims|descriptions|labels|sitelinks&redirects=yes&sites=&titles=&variant=zh-cn

MediaWiki requests (&variant=zh-cn):

>>> print p.g_query['query'].replace('&format=json','')

https://zh.wikipedia.org/w/api.php?action=query&exintro&formatversion=2&inprop=displaytitle|url|watchers&list=random&pithumbsize=240&ppprop=wikibase_item&prop=extracts|images|info|pageimages|pageprops&redirects&rnlimit=1&rnnamespace=0&titles=林一峰&variant=zh-cn

>>> print p.g_parse['query'].replace('&format=json','')

https://zh.wikipedia.org/w/api.php?action=parse&contentmodel=text&disableeditsection=&disablelimitreport=&disabletoc=&formatversion=2&pageid=252279&prop=text|iwlinks|parsetree|wikitext|displaytitle|properties&variant=zh-cn

This is what should happen:

www.wikidata.org (action=wikidata) Q5094115  <= wikibase start
www.wikidata.org (action=wikidata) Q148|Q5   <= resolve claims
zh.wikipedia.org (action=query) 林一峰        <= query by title
zh.wikipedia.org (action=parse) 252279       <= parse by pageid
Q5094115 (zh/zh-cn)                          <= zh with zh-cn variant results
{
  extext: <str(223)> **林一峰**(英文名:Chet Lam,1976年4月11日-),香港土生土长的创作歌手,未...
  lang: zh
  pageid: 252279
  title: 林一峰
  url: https://zh.wikipedia.org/wiki/%E6%9E%97%E4%B8%80%E5%B3%B0
  variant: zh-cn
  wikibase: Q5094115
  wikidata_url: https://www.wikidata.org/wiki/Q5094115
  ...
}

@seansay I hope that works for you. Thanks so much for your help!