API ของ Wiktionary จะใช้ในการพิจารณาได้อย่างไรว่ามีคำหรือไม่
API ของ Wiktionary จะใช้ในการพิจารณาได้อย่างไรว่ามีคำหรือไม่
คำตอบ:
วิกิ APIสามารถใช้ในการสอบถามหรือไม่ว่าคำที่มีอยู่
ตัวอย่างสำหรับหน้าที่มีอยู่และไม่มีอยู่:
http://en.wiktionary.org/w/api.php?action=query&titles=test
http://en.wiktionary.org/w/api.php?action=query&titles=testx
ลิงก์แรกให้ตัวอย่างเกี่ยวกับรูปแบบประเภทอื่น ๆ ที่อาจแยกวิเคราะห์ได้ง่ายกว่า
ในการดึงข้อมูลของคำในรูปแบบ XHTML ขนาดเล็ก (ควรมีมากกว่าที่จำเป็น) ขอเวอร์ชันสำหรับพิมพ์ของหน้า:
http://en.wiktionary.org/w/index.php?title=test&printable=yes
http://en.wiktionary.org/w/index.php?title=testx&printable=yes
จากนั้นสามารถแยกวิเคราะห์ด้วยตัวแยกวิเคราะห์ XML มาตรฐาน
https://en.wiktionary.org/w/?curid=[page_id]&printable=yes
เพื่อเปลี่ยนเส้นทางไปยังหน้า XHTML โดยใช้pageid
ไฟล์.
มีข้อแม้บางประการในการตรวจสอบว่า Wiktionary มีหน้าที่มีชื่อที่คุณกำลังค้นหา:
ข้อแม้ # 1 : วิกิพจนานุกรมทั้งหมดรวมถึงวิกิพจนานุกรมภาษาอังกฤษมีเป้าหมายในการรวมทุกคำในทุกภาษาดังนั้นหากคุณใช้การเรียก API ด้านบนคุณจะรู้ว่าคำที่คุณกำลังถามเป็นคำในภาษาอย่างน้อยหนึ่งภาษา แต่ ไม่จำเป็นต้องเป็นภาษาอังกฤษ: http://en.wiktionary.org/w/api.php?action=query&titles=dicare
ข้อแม้ # 2 : บางทีอาจมีการเปลี่ยนเส้นทางจากคำหนึ่งไปอีกคำหนึ่ง อาจมาจากการสะกดแบบอื่น แต่อาจมาจากข้อผิดพลาดบางอย่าง การเรียก API ด้านบนจะไม่แยกความแตกต่างระหว่างการเปลี่ยนเส้นทางและบทความ: http://en.wiktionary.org/w/api.php?action=query&titles=profilemetry
คำเตือน # 3 : วิกิพจนานุกรมบางแห่งรวมถึงวิกิพจนานุกรมภาษาอังกฤษมี "การสะกดผิดทั่วไป": http://en.wiktionary.org/w/api.php?action=query&titles=fourty
ข้อแม้ # 4 : วิกิพจนานุกรมบางแห่งอนุญาตให้มีรายการต้นขั้วที่มีข้อมูลเกี่ยวกับคำศัพท์เพียงเล็กน้อยหรือไม่มีเลย สิ่งนี้เคยมีอยู่ทั่วไปในวิกิพจนานุกรมหลายแห่ง แต่ไม่ใช่วิกิพจนานุกรมภาษาอังกฤษ แต่ดูเหมือนว่าตอนนี้จะแพร่กระจายไปยังวิกิพจนานุกรมภาษาอังกฤษด้วย: https://en.wiktionary.org/wiki/%E6%99%B6%E7%90%83 (ลิงก์ถาวรเมื่อเติมต้นขั้วเพื่อให้คุณยังคงเห็น ต้นขั้วหน้าตาเป็นอย่างไร: https://en.wiktionary.org/w/index.php?title=%E6%99%B6%E7%90%83&oldid=39757161 )
หากสิ่งเหล่านี้ไม่รวมอยู่ในสิ่งที่คุณต้องการคุณจะต้องโหลดและแยกวิเคราะห์ wikitext ด้วยตัวเองซึ่งไม่ใช่งานเล็กน้อย
&prop=info
ในแบบสอบถามและตรวจสอบการตอบสนองสำหรับredirect
แอตทริบิวต์
คุณสามารถดาวน์โหลดการถ่ายโอนข้อมูลของข้อมูลวิกิพจนานุกรม มีข้อมูลเพิ่มเติมในเรื่องคำถามที่พบบ่อย สำหรับวัตถุประสงค์ของคุณการถ่ายโอนข้อมูลคำจำกัดความอาจเป็นทางเลือกที่ดีกว่าดัมพ์ xml
เพื่อให้ง่ายจริงๆให้แยกคำจากการถ่ายโอนข้อมูลเช่นนี้:
bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words
หากคุณใช้ Python คุณสามารถใช้WiktionaryParserโดย Suyash Behera
คุณสามารถติดตั้งได้โดย
sudo pip install wiktionaryparser
ตัวอย่างการใช้งาน:
>>> from wiktionaryparser import WiktionaryParser
>>> parser = WiktionaryParser()
>>> word = parser.fetch('test')
>>> another_word = parser.fetch('test', 'french')
>>> parser.set_default_language('french')
คุณอาจต้องการลองใช้ JWKTL ฉันเพิ่งค้นพบเกี่ยวกับเรื่องนี้;)
http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API
ดังที่ได้กล่าวไว้ก่อนหน้านี้ปัญหาของแนวทางนี้คือวิกิพจนานุกรมให้ข้อมูลเกี่ยวกับคำทั้งหมดของภาษาทั้งหมด ดังนั้นวิธีตรวจสอบว่ามีเพจอยู่หรือไม่โดยใช้ Wikipedia API จะใช้ไม่ได้เพราะมีหน้าเว็บจำนวนมากสำหรับคำที่ไม่ใช่ภาษาอังกฤษ ในการเอาชนะสิ่งนี้คุณต้องแยกวิเคราะห์แต่ละหน้าเพื่อดูว่ามีส่วนที่อธิบายคำภาษาอังกฤษหรือไม่ การแยกวิเคราะห์ wikitext ไม่ใช่เรื่องเล็กน้อย แต่ในกรณีของคุณมันก็ไม่ได้แย่ขนาดนั้น เพื่อให้ครอบคลุมเกือบทุกกรณีคุณต้องตรวจสอบว่า wikitext มีEnglish
หัวข้อหรือไม่ ขึ้นอยู่กับภาษาโปรแกรมที่คุณใช้คุณสามารถค้นหาเครื่องมือบางอย่างเพื่อสร้างAST ได้จาก wikitext ซึ่งจะครอบคลุมกรณีส่วนใหญ่ แต่ไม่ใช่ทั้งหมดเนื่องจาก Wiktionary มีการสะกดผิดที่พบบ่อย
อีกทางเลือกหนึ่งคุณสามารถลองใช้Lingua Robotหรือสิ่งที่คล้ายกัน Lingua Robot แยกวิเคราะห์เนื้อหา Wiktionary และจัดให้เป็น REST API การตอบสนองที่ไม่ว่างเปล่าหมายความว่ามีคำนั้นอยู่ โปรดทราบว่าในทางตรงกันข้ามกับ Wiktionary API นั้นไม่มีการสะกดผิดใด ๆ (อย่างน้อยก็ในขณะที่เขียนคำตอบนี้) โปรดทราบว่า Wiktionary ไม่เพียง แต่ประกอบด้วยคำศัพท์เท่านั้น แต่ยังมีนิพจน์หลายคำด้วย
คุณสามารถใช้ Revisions API:
หรือ Parse API:
https://en.wiktionary.org/w/api.php?action=parse&page=test&prop=wikitext&formatversion=2
มีตัวอย่างเพิ่มเติมในเอกสารเอกสาร
นี่คือจุดเริ่มต้นในการแยกวิเคราะห์นิรุกติศาสตร์และข้อมูลการออกเสียง:
function parsePronunciationLine(line) {
let val
let type
line.replace(/\{\{\s*a\s*\|UK\s*\}\}\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en\}\}/, (_, $1) => {
val = $1
type = 'uk'
})
line.replace(/\{\{\s*a\s*\|US\s*\}\}\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en\}\}/, (_, $1) => {
val = $1
type = 'us'
})
line.replace(/\{\{enPR|[^\}]+\}\},?\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'us'
})
line.replace(/\{\{a|GA\}\},?\s*\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'ga'
})
line.replace(/\{\{a|GA\}\},?.+\{\{IPA\|\/?([^\/\|]+)\/?\|lang=en}}/, (_, $1) => {
val = $1
type = 'ga'
})
// {{a|GA}} {{IPA|/ˈhæpi/|lang=en}}
// * {{a|RP}} {{IPA|/pliːz/|lang=en}}
// * {{a|GA}} {{enPR|plēz}}, {{IPA|/pliz/|[pʰliz]|lang=en}}
if (!val) return
return { val, type }
}
function parseEtymologyPiece(piece) {
let parts = piece.split('|')
parts.shift() // first one is ignored.
let ls = []
if (langs[parts[0]]) {
ls.push(parts.shift())
}
if (langs[parts[0]]) {
ls.push(parts.shift())
}
let l = ls.pop()
let t = parts.shift()
return [ l, t ]
// {{inh|en|enm|poisoun}}
// {{m|enm|poyson}}
// {{der|en|la|pōtio|pōtio, pōtiōnis|t=drink, a draught, a poisonous draught, a potion}}
// {{m|la|pōtō|t=I drink}}
// {{der|en|enm|happy||fortunate, happy}}
// {{cog|is|heppinn||lucky}}
}
อัปเดต : นี่คือส่วนสำคัญที่มีเนื้อมากขึ้น
langs
อะไร?
langs
คือไม่กี่พันบรรทัดใหญ่เกินไปสำหรับ SO