Featured image of post 查詢萌典中的同義詞和反義詞

查詢萌典中的同義詞和反義詞

萌典是一部由臺灣開源社群 - g0v 零時政府開發的數位化漢語詞典。

關於萌典

萌典是一部由臺灣開源社群 g0v 零時政府開發的數位化漢語詞典。國語資料來源為《教育部重編國語辭典修訂本》,閩南語資料來自《臺灣閩南語常用詞辭典》,客家語資料則源自《臺灣客家語常用詞辭典》。除此之外,該計畫近日也新增了阿美語萌典

 

方法一: BeautifulSoup

1
2
import requests
from bs4 import BeautifulSoup

以「容忍」一詞為例:

1
2
3
4
5
6
word = '容忍'

res = requests.get(url = f'https://www.moedict.tw/{word}')
print(res)

## <Response [200]>

確認請求成功後,回到網頁,使用快捷鍵 Option+Command+U(Windows: Ctrl + U,或是右鍵 -> View Page Source),從網頁原始碼中可以看到同義詞和反義詞藏在 <span> tag 裡面。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
soup = BeautifulSoup(res.text, 'lxml')
span_syn = soup.select('span.synonyms')
span_ant = soup.select('span.antonyms')

if span_syn:
  syn = span_syn[0].get_text()
  syns = syn[1:].split('、')
else: syns = []

if span_ant:
  ant = span_ant[0].get_text()
  ants = ant[1:].split('、')
else: ants = []

moe_relations = {'synonyms': syns, 'antonyms': ants}

最後得到「容忍」的同義詞和反義詞如下:

1
2
3
moe_relations

## {'antonyms': ['發作', '拒絕', '生氣'], 'synonyms': ['忍耐']}

 

方法二: urllib

1
2
import urllib.request, urllib.parse
import json

同樣以「容忍」一詞為例:

1
2
3
4
5
word = '容忍'
word_urllib = urllib.parse.quote_plus(word)

with urllib.request.urlopen(f'https://www.moedict.tw/raw/{word_urllib}') as url:
    data = json.loads(url.read().decode())

json 檔讀進來,結構如下:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
data

## {'heteronyms': [{'bopomofo': 'ㄖㄨㄥˊ ㄖㄣˇ',
##    'bopomofo2': 'rúng rěn',
##    'definitions': [{'antonyms': '發作,拒絕,生氣',
##      'def': '包容、忍耐。',
##      'quote': ['漢書.卷八十六.王嘉傳:「唯陛下留神於擇賢,記善忘過,容忍臣子,勿責以備。」',
##       '元.無名氏.連環計.第四折:「倒是呂布兄弟還容忍得過,若我白袍李肅呵,殺了那老賊多時也。」'],
##      'synonyms': '忍耐'}],
##    'pinyin': 'róng rěn'}],
##  'title': '容忍'}

json 檔中一層一層抓出同義詞和反義詞:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
syns = data.get('heteronyms')[0].get('definitions')[0].get('synonyms')
ants = data.get('heteronyms')[0].get('definitions')[0].get('antonyms')

if syns:
  syns = syns.split(',')
else: syns = []

if ants:
  ants = ants.split(',')
else: ants = []

moe_relations = {'synonyms': syns, 'antonyms': ants}

最後結果如下:

1
2
3
moe_relations

## {'antonyms': ['發作', '拒絕', '生氣'], 'synonyms': ['忍耐']}

 

結論

相較於以語意關係為主軸建置的中文詞彙網路,萌典的語意關係資料較少,僅部分詞條具有同義及反義詞,且並未區分同義和近義。但萌典收錄的詞條較為完整,還有讀音、部首、筆劃等資訊,可以用於不同研究主題。

👩‍💻 本文程式碼連結

 

Photo by Richa Sharma on Unsplash

comments powered by Disqus
Built with Hugo
Theme Stack designed by Jimmy