## Wikidata 著錄問題,開源工具可以幫忙什麼
OpenStreetMap x Wikidata
[[User:Planetoid]]
---
## Issues
1. 重複資料: 村里或縣市重複
2. 資料來源變動: 參照的維基百科條目改名/結束營業/整併
3. 資料錯誤: 有人把蔡琴跟周采芹搞混啦
4. 其他增進資料品質的方式
---
Slido QA
![](https://i.imgur.com/EHsinh0.png)
https://app.sli.do/event/iyqpvodk
---
### Issue 1: 重複資料 村里或縣市重複
原因
* 建立新條目時或使用批次匯入資料工具,建立一筆或多筆條目時,沒有確認有無重複
解決方式構想
* 將縣市或村里名稱當作關鍵字,查詢有無重複條目
---
#### Method 1: 使用 Wikidata 網站介面 (少量資料的作法)
建立新條目之前,使用 Wikidata 網站搜尋介面,確認有無重複
![](https://i.imgur.com/2hnlLHB.png =700x)
---
如果發現重複,可以合併重複的條目
(1) `更多 V` -> `合併` (介面簡體字 `合并`)
![](https://i.imgur.com/O0OVtNf.png)
---
(2) 選擇要合併的其他條目識別碼 (Q 開頭 + 數字)
![](https://i.imgur.com/qPJwkgw.png =700x)
---
#### 問題 1: 搜尋結果出現不相關條目
* 問題狀況: 搜尋結果前幾筆是標題或內容包含關鍵字的條目,但是結果後幾筆則會將關鍵字逐字拆解,例如搜尋「中崙里」卻會出現「崙東村」
* 處理方式: 改用精準搜尋,在關鍵字前後加上雙引號,例如
* 原: `中崙里`
* 改: `"中崙里"`
---
#### 問題 2: 更複雜的搜尋條件
不同縣市都有「中崙里」、同一縣市不同區也有「中崙里」
* 問題: 高雄市、台北市等不同縣市都有「中崙里」
* 處理方式: 將多個關鍵字空格,例如「高雄市 中崙里」或「"高雄市" "中崙里"」或者使用進階搜尋介面
---
![](https://i.imgur.com/lfE7kht.png)
---
#### Method 2: MediaWiki Action API (大量資料的作法)
資料狀況
* 台灣有 368 個[鄉鎮市區](https://zh.wikipedia.org/wiki/%E4%B8%AD%E8%8F%AF%E6%B0%91%E5%9C%8B%E8%87%BA%E7%81%A3%E5%9C%B0%E5%8D%80%E9%84%89%E9%8E%AE%E5%B8%82%E5%8D%80%E5%88%97%E8%A1%A8)(146鄉、38鎮、14市、170區),逐筆輸入手抽筋
解決方法
* 透過 MediaWiki Action API 多筆資料查詢
* `action=query` 取得來自及有關 MediaWiki 的資料。
* 授權條款: `GNU General Public License v.2` https://github.com/wikimedia/mediawiki/
* 說明文件: https://www.wikidata.org/w/api.php?action=help&modules=query
---
#### 什麼是 API
應用程式介面 (Application Programming Interface, 簡稱 API)
> 一種計算介面,它定義多個軟體中介之間的互動,
> 以及可以進行的呼叫(call)或請求(request)的種類,
> 如何進行呼叫或發出請求,應使用的資料格式,應遵循的慣例等。
出處: 維基百科 https://zh.wikipedia.org/zh-tw/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%8E%A5%E5%8F%A3
---
![](https://i.imgur.com/0yzo9z5.jpg =60%x)
相片授權: CC-BY-SA https://commons.wikimedia.org/wiki/File:Gonta_sushi.jpg
---
> 服務生:協助餐廳系統內多個中介者 (櫃臺、廚師) 之間的互動,
> 以及提供餐點其餐廳其他服務種類,
> 如何點餐或請求其他服務,應使用的資料格式,應遵循的慣例 (點菜) 等。
---
* 透過服務生,顧客不需要精通廚房內怎樣備料、櫃台怎樣派工給廚房、廚師如何調理食材等內部細節。
* 透過 API,使用者不需要精通網站內怎樣連線、資料庫資料處理、資料交換過程與輸出等內部細節。
---
#### MediaWiki Action API 基本禮節
* API `讀` 資料雖然沒有硬性的存取限制,但是戳 API 太兇,會被無預警 ban
* 循序呼叫 API,而非一次同時呼叫多個 API
* 前一個 API 完成後,再呼叫下一個 API
* (如果可以) 使用資料管線符號 (|) 在一次呼叫內,組合多個查詢條件,例如`titles=PageA|PageB|PageC`,而不一是一次查詢一個條件
---
* 如果回傳結果有多頁,則使用 `generator`,而不是每次重新呼叫
* 使用 Gzip 壓縮呼叫 API 節省頻寬,例如在 header 設定
> `Accept-Encoding: gzip`
參考資料: API:Etiquette https://www.mediawiki.org/wiki/API:Etiquette/zh
---
![](https://i.imgur.com/YHzVlnX.png =550x)
---
#### API REQUEST 格式
```
https://www.wikidata.org/w/api.php
?action=query
&list=search
&srsearch=中崙里
&format=json
```
1. endpoint (端點)
* 維基媒體基金會 Wiki API endpoint 格式 `http://example.org/w/api.php`
* Wikidata API endpoint `https://www.wikidata.org/w/api.php`
2. 動作
* `action` 變數 `action=query` 呼叫 API 取得資料
---
3. 模組
* `prop`: 取得條目屬性
* `list`: 取得符合條件的條目清單
* `meta`: 取得 wiki 或使用者後設資訊 (meta information) e.g. `meta=siteinfo` 取得 wiki 資訊
4. 其他變數
* `srsearch=中崙里` 搜尋標題或內容包含「中崙里」的條目
* `format=json` 回傳 `JSON` 格式
---
URL 查詢字串
```
https://www.wikidata.org/w/api.php 端點
?action=query 動作
&list=search 模組
&srsearch=中崙里 其他變數
&format=json
```
直接打開[網址](https://www.wikidata.org/w/api.php?action=query&list=search&srsearch=%E4%B8%AD%E5%B4%99%E9%87%8C&format=json)、或在 API 沙箱[打開](https://www.wikidata.org/wiki/Special:ApiSandbox#action=query&format=json&list=search&srsearch=%E4%B8%AD%E5%B4%99%E9%87%8C)
---
#### 關鍵字 `中崙里` 查詢結果
![](https://i.imgur.com/WRmPxbq.png =550x)
---
#### 問題 3: API 夾雜不相關的結果
關鍵字前後加上雙引號,例如`"中崙里"` 查詢結果:`snippet` 欄位標示符合的關鍵字
![](https://i.imgur.com/jz37uZh.png =800x)
直接打開[網址](https://www.wikidata.org/w/api.php?action=query&list=search&srsearch=%22%E4%B8%AD%E5%B4%99%E9%87%8C%22&format=json)、或在 API 沙箱[打開](https://www.wikidata.org/wiki/Special:ApiSandbox#action=query&format=json&list=search&srsearch=%22%E4%B8%AD%E5%B4%99%E9%87%8C%22)
---
#### 問題 4: 輸入中文關鍵字,API 回傳英文結果
> 查詢變數加上 `uselang=zh-tw`
```
https://www.wikidata.org/w/api.php
?action=query
&list=search
&srsearch=中崙里
&uselang=zh-tw
&format=json
```
偏好英文則使用 `uselang=en`,如果已經登入 wikidata 帳號,瀏覽器顯示的 API 結果會套用帳號設定的介面語言
直接打開[網址](https://www.wikidata.org/w/api.php?action=query&list=search&srsearch=中崙里&uselang=zh-tw&format=json)、或在 API 沙箱[打開](https://www.wikidata.org/wiki/Special:ApiSandbox#action=query&format=json&uselang=zh-tw&list=search&srsearch=%E4%B8%AD%E5%B4%99%E9%87%8C)
---
#### 語言代碼清單
| 語言代碼 | 名稱|
| -------- | -------- |
| en | 英文 |
| hak | 客家話 |
| zh | 中文 |
| zh-tw | 中文(台灣) |
| zh-hant | 中文(繁體) |
| zh-classicallzh | 文言 |
| zh-yue | 粵語 |
相關資料: [其他語言代碼](https://www.mediawiki.org/wiki/API:SetPageLanguage)
---
#### 問題 5: API 指定了 lang=中文,還是回傳英文結果
> 錯誤訊息: Unrecognized parameter: lang.
> 查詢變數是 `uselang=zh-tw` 不是 `lang`、也不是 `setpagelanguage`
```
https://www.wikidata.org/w/api.php
?action=query
&list=search
&srsearch=中崙里
&uselang=zh-tw
&format=json
```
---
#### 問題 6: API 結果中文亂碼 (\u 和一串數字反覆出現)
\uxxxx 是將 Unicode 文字編碼,要還原成一般可讀中文字,可用
* Chrome/Edge 瀏覽器 + 擴充套件 JSONView https://chrome.google.com/webstore/search/jsonview
* Firefox 瀏覽器直接還原成一般可讀中文字
* 或使用程式 json decode
編碼 (Encoding) 相關資料: https://rapidjson.org/md_doc_encoding.html
---
#### API 沙箱
API 沙箱 (sandbox) 可調整選項變數
* wikidata https://www.wikidata.org/wiki/Special:ApiSandbox
* wikipedia https://en.wikipedia.org/wiki/Special:ApiSandbox
![](https://i.imgur.com/JZVN1IV.png)
---
可預覽 API 結果
![](https://i.imgur.com/U2EwVoX.png)
---
方便取得 URL 查詢字串
![](https://i.imgur.com/DniLh1n.png)
如果遇到跑版狀況,瀏覽器需要往右捲才能看到
---
### Issue 2: 資料來源變動 參照的維基百科條目改名/結束營業/整併
改名狀況 e.g.「加工出口區楠梓園區」-->「楠梓科技產業園區」
* 資料呈現: 原維基百科條目「[加工出口區楠梓園區](https://zh.wikipedia.org/w/index.php?title=%E5%8A%A0%E5%B7%A5%E5%87%BA%E5%8F%A3%E5%8D%80%E6%A5%A0%E6%A2%93%E5%9C%92%E5%8D%80&redirect=no)」重新導向頁面 (redirect) 到「[楠梓科技產業園區](https://zh.wikipedia.org/wiki/%E6%A5%A0%E6%A2%93%E7%A7%91%E6%8A%80%E7%94%A2%E6%A5%AD%E5%9C%92%E5%8D%80)」
* 預期結果: 直接修改 Wikidata [楠梓科技產業園區 (Q10900780)](https://www.wikidata.org/wiki/Q10900780) 條目的「標籤」,並將舊名加到「別稱」
---
結束營業 e.g. 「台北市兒童交通博物館」2008年閉館,目前原址是「台北市客家文化主題公園」
* 資料呈現: 原維基百科條目「[台北市兒童交通博物館](https://zh.wikipedia.org/w/index.php?title=%E5%8F%B0%E5%8C%97%E5%B8%82%E5%85%92%E7%AB%A5%E4%BA%A4%E9%80%9A%E5%8D%9A%E7%89%A9%E9%A4%A8&redirect=no)」重新導向頁面到「[臺北市客家文化主題公園](https://zh.wikipedia.org/wiki/%E8%87%BA%E5%8C%97%E5%B8%82%E5%AE%A2%E5%AE%B6%E6%96%87%E5%8C%96%E4%B8%BB%E9%A1%8C%E5%85%AC%E5%9C%92)」
* 預期結果: 不同機構分別建立兩個 WikiData 條目 [兒童交通博物館 (Q9403819)](https://www.wikidata.org/wiki/Q9403819)、[臺北市客家文化主題公園 (Q98000157)](https://www.wikidata.org/wiki/Q98000157)
---
村里整併 e.g. 台南市「烏樹里」2018年併入「後壁區」
* 資料呈現: Wikipedia 無「烏樹里」條目
* 預期結果: 分別建立兩個 WikiData 條目:[後壁區 (Q709000)](https://www.wikidata.org/wiki/Q709000)、[烏樹里 (Q96976284)](https://www.wikidata.org/wiki/Q96976284?)
---
#### 資料狀況與解決方式構想
資料狀況
* Wikipedia 原條目「兒童交通博物館」關注度不足,形同被刪除
* Wikidata 有「解散、廢除或拆毀日」欄位
* Wikipedia 舊條目都是重新導向頁面到新條目
解決方式構想
* Wikidata 條目只能有一個 中文語系 Wikipedia (sitelink)欄位值
* 查詢引用的 Wikipedia 條目名稱是否與 Wikidata 一致
---
#### Method: 使用 API 取得條目名稱、sitelink 與條目名稱
步驟 (1) 指定 Wikidata 識別碼,取得 Wikidata 條目標籤
* 使用 `action=query` 與 `prop` 取得 Wikidata 資料。
* 授權條款: GPL-2.0-or-later
* 說明文件: https://www.wikidata.org/w/api.php?action=help&modules=query
---
步驟 (2) 取得中文 Wikipedia sitelink 與條目名稱
* 使用 `action=wbgetentities` 取得多個 Wikibase 實體的資料。
* 授權條款: GPL-2.0-or-later
* 說明文件: https://www.wikidata.org/w/api.php?action=help&modules=wbgetentities
---
#### 步驟 (1) 指定 Wikidata 識別碼,取得 `條目標籤`
URL 查詢字串
```
https://www.wikidata.org/w/api.php
?action=query 取得 Wikidata 資料
&prop=cirrusbuilddoc 取得頁面資料
&titles=Q98000157 指定 Wikidata 識別碼 e.g. Qxx
&format=json 輸出 JSON 格式
```
直接打開[網址](https://www.wikidata.org/w/api.php?action=query&format=json&prop=cirrusbuilddoc&titles=Q98000157)、或在 API 沙箱[打開](https://www.wikidata.org/wiki/Special:ApiSandbox#action=query&format=json&uselang=zh-tw&prop=cirrusbuilddoc&titles=Q98000157)
---
![](https://i.imgur.com/Cs3K6HO.png)
---
![](https://i.imgur.com/2kPbQ9m.png =600x)
---
#### 步驟 (2) 取得中文 Wikipedia sitelink 與條目名稱
URL 查詢字串
```
https://www.wikidata.org/w/api.php
?action=wbgetentities 取得 Wikibase 實體的資料
&props=sitelinks 取得 sitelinks 欄位資料
&ids=Q98000157 指定 Wikidata 識別碼 e.g. Qxx
&format=json 輸出 JSON 格式
```
直接打開[網址](https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&props=sitelinks&ids=Q98000157)、或在 API 沙箱[打開](https://www.wikidata.org/wiki/Special:ApiSandbox#action=query&action=wbgetentities&format=json&props=sitelinks&ids=Q98000157)
---
![](https://i.imgur.com/BoevzE8.png)
---
對應 Wikidata 上[臺北市客家文化主題公園 (Q98000157)](https://www.wikidata.org/wiki/Q98000157)的 2 筆 sitelink 資料
![](https://i.imgur.com/JCXWn3l.png)
---
#### 比較 Wikidata 條目標籤 與 中文 Wikipedia 名稱
* Wikidata: `臺北市客家文化主題公園`
* JSON 路徑: `cirrusbuilddoc/labels/zh-tw`
* 中文 Wikipedia: `臺北市客家文化主題公園`
* JSON 路徑: `sitelinks/zhwiki/title`
---
#### 容易混淆的名詞
* 標籤/名稱
* Wikidata 有多語系,所以同一實體可能有多個語言的 `條目標籤` 相當於 Wikipedia `條目名稱`
* Wikidata 編號系統:API 結果看到兩種編號系統
* 以 Q 開頭的識別碼,例如 `title=臺北市客家文化主題公園` 對應 `id=Q98000157`
* 數字的編號,例如 `title=臺北市客家文化主題公園` 對應 `pageid=96289044`
* 使用者網頁上看到的只有 Q 開頭的識別碼,所以 pageid 讓開發者傷腦筋就可以了
---
#### 問題 7: 指定 Wikidata 識別碼,取得條目資訊太少
`prop=info` 取得條目資訊太少 (直接打開[網址](https://www.wikidata.org/w/api.php?action=query&format=json&prop=info&titles=Q98000157)),需要改用 `prop=cirrusbuilddoc`
![](https://i.imgur.com/PVpa4bk.png =500x)
---
#### 問題 8: 不同語系 sitelink 太多
法國 [羅浮宮 (Q19675)](https://www.wikidata.org/wiki/Q19675) 共 144 筆 sitelink 資料
![](https://i.imgur.com/y9YFCiN.png)
---
URL 查詢字串使用 `sitefilter=zhwiki` 篩選要顯示的特定 wiki 網站
```
https://www.wikidata.org/w/api.php
?action=wbgetentities 取得 Wikibase 實體的資料
&props=sitelinks 取得 sitelinks 欄位資料
&ids=Q98000157 指定 Wikidata 識別碼
&sitefilter=zhwiki 只要顯示 zhwiki 網站資料
&format=json 輸出 JSON 格式
```
直接打開[網址](https://www.wikidata.org/w/api.php?action=wbgetentities&format=json&props=sitelinks&ids=Q98000157&sitefilter=zhwiki)、或在 API 沙箱[打開](https://www.wikidata.org/wiki/Special:ApiSandbox#action=wbgetentities&format=json&props=sitelinks&ids=Q98000157&sitefilter=zhwiki)
---
原本有 hakawiki 和 zhwiki,改成只顯示 zhwiki
![](https://i.imgur.com/SKWfI4t.png)
---
#### 常見 wiki 代碼
| site id | 語言 |
| -------- | -------- |
| enwiki | 英文 [Wikipedia](https://en.wikipedia.org/wiki/Main_Page) |
| zhwiki | 中文 [维基百科](https://zh.wikipedia.org/wiki/Wikipedia:%E9%A6%96%E9%A1%B5) |
| zh-yuewiki | 粵文 [維基百科](https://zh-yue.wikipedia.org/wiki/%E9%A0%AD%E7%89%88) |
| zh_min_nanwiki | 閩南語 [Wikipedia, chū\-iû ê pek\-kho\-choân\-su](https://zh-min-nan.wikipedia.org/wiki/Th%C3%A2u-ia%CC%8Dh) |
| classicalwiki | 文言 [維基大典](https://zh-classical.wikipedia.org/wiki/%E7%B6%AD%E5%9F%BA%E5%A4%A7%E5%85%B8:%E5%8D%B7%E9%A6%96) |
| hakwiki | 客家話 [維基百科-自由个百科全書](https://hak.wikipedia.org/wiki/Th%C3%A8u-Ya%CC%8Dp) |
---
### Issue 3: 資料錯誤 有人把蔡琴跟周采芹搞混啦
有人把 #[蔡琴](https://zh.wikipedia.org/wiki/%E8%94%A1%E7%90%B4) 跟 #[周采芹](https://zh.wikipedia.org/wiki/%E5%91%A8%E9%87%87%E8%8A%B9) 搞混啦
![](https://i.imgur.com/ZICiLoT.png =500x)
[文章網址](https://www.facebook.com/groups/2212207218990971/permalink/2782423421969345/)
---
#### Method: 電腦視覺辨識
[維基百科](https://zh.wikipedia.org/wiki/%E8%AE%A1%E7%AE%97%E6%9C%BA%E8%A7%86%E8%A7%89):
```
電腦視覺(Computer vision)是一門研究如何使機器「看」的科學,
更進一步的說,就是指用攝影機和電腦代替人眼對目標進行辨識、
跟蹤和測量等機器視覺,並進一步做圖像處理
```
---
秋田 (Akita)、柴犬 (Shiba) 傻傻分不清
![](https://i.imgur.com/EgzUmPX.jpg =200x)
![](https://i.imgur.com/M29eiEF.jpg =300x)
https://zh.wikipedia.org/wiki/%E7%A7%8B%E7%94%B0%E7%8A%AC
https://zh.wikipedia.org/wiki/%E6%9F%B4%E7%8A%AC
---
使用「名人人臉辨識」(Celebrity recognition)
* [Amazon Rekognition](https://aws.amazon.com/tw/rekognition/?blog-cards.sort-by=item.additionalFields.createdDate&blog-cards.sort-order=desc)
* [DeepAI](https://deepai.org/machine-learning-model/celebrity-recognition)
* 其他家 ...
---
#### 周采芹辨識結果
![](https://i.imgur.com/9uYYzWa.jpg)
---
#### 蔡琴辨識結果 1
臉被麥克風遮住,要辨識難了點
![](https://i.imgur.com/lZCtF06.jpg)
---
#### 蔡琴辨識結果 2
![](https://i.imgur.com/6jS4T5B.jpg)
---
#### 資料錯誤可能原因
兩位明星英文名相同,導致相片 Commons 放錯,連帶影響 Wikidata
* 周采芹 [Tsai Chin \(actress\)](https://en.wikipedia.org/wiki/Tsai_Chin_(actress))
* 蔡琴 [Tsai Chin \(singer\)](https://en.wikipedia.org/wiki/Tsai_Chin_(singer))
---
#### 電腦影像辨識 名人辨識結果
| 照片 | 預期結果 | [AWS](https://aws.amazon.com/tw/rekognition/?blog-cards.sort-by=item.additionalFields.createdDate&blog-cards.sort-order=desc) 辨識結果 | [DeepAI](https://deepai.org/machine-learning-model/celebrity-recognition) 辨識結果 |
| -------- | -------- | -------- | -------- |
| ![](https://i.imgur.com/0TWEVMm.jpg =50x) | 周采芹 | [Tsai Chin](https://www.imdb.com/name/nm0157796/) | N/A |
| ![](https://i.imgur.com/En2rWDB.jpg =50x) | 蔡琴 | N/A | N/A |
| ![](https://i.imgur.com/zr6xFpo.jpg =50x) | 蔡琴 | [Tsai Chin](https://www.imdb.com/name/nm0157797) | N/A |
相片來源:前兩張取自[Wikimedia Commons](https://commons.wikimedia.org/wiki/Main_Page)、第三張相片取自[台大圖書館](http://focus.lib.ntu.edu.tw/?q=zh-hant/%E5%8F%B0%E7%81%A3%E6%A0%A1%E5%9C%92%E6%B0%91%E6%AD%8C/%E7%B5%B2%E7%B5%A8%E6%AD%8C%E5%90%8E-%E8%94%A1%E7%90%B4)
---
### Issue 4: 其他增進資料品質的方式
* 屬性約束值 (Property constraints) https://www.wikidata.org/wiki/Help:Property_constraints_portal
* [Wikidata Schemas](https://www.wikidata.org/wiki/Wikidata:Schemas) 規範特定類型條目有哪些屬性,例如人使用 [Schema:E10](https://www.wikidata.org/wiki/EntitySchema:E10)
* 讓問題更容易被發現
* 讓問題修正更容易被進行
---
Slido QA
![](https://i.imgur.com/EHsinh0.png)
https://app.sli.do/event/iyqpvodk
{"metaMigratedAt":"2023-06-16T00:07:25.798Z","metaMigratedFrom":"YAML","title":"Wikidata 著錄問題,開源工具可以幫忙什麼","breaks":"true","slideOptions":"{\"theme\":\"white\",\"transition\":\"fade\"}","contributors":"[{\"id\":\"2d64bd97-01e5-4872-b941-bf0089ad4bda\",\"add\":33247,\"del\":19359}]"}