จะดึงเนื้อหาคำในวิกิพจนานุกรมได้อย่างไร?


90

API ของ Wiktionary จะใช้ในการพิจารณาได้อย่างไรว่ามีคำหรือไม่


ทุกคนที่อ่านเอกสารประกอบจะเห็นว่า API ไม่มีฟังก์ชันการทำงานที่ใกล้เพียงพอที่จะ "ดึงเนื้อหาคำในวิกิพจนานุกรม" ฉันคาดว่าจะทำให้คุณได้รับประมาณ 1% คุณสามารถดึงข้อมูลไวยากรณ์วิกิดิบหรือ HTML ที่แยกวิเคราะห์และจากนั้นคุณต้องทำทุกอย่างด้วยตัวเอง ต้องบอกว่าอาจมี API ทดลองใหม่ที่ใช้ได้เฉพาะในวิกิพจนานุกรมภาษาอังกฤษเท่านั้น
hippietrail

3
รับบทความ Wiktionary ทั้งหมดในไฟล์ JSON แต่ละไฟล์ที่นี่: github.com/dan1wang/jsonbook-builder
daniel

คำตอบ:


69

วิกิ 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 มาตรฐาน


4
ขอบคุณ; API นั้นไม่ใช่สิ่งที่ฉันหวัง แต่ลิงก์ที่คุณให้มาคือสิ่งที่ฉันกำลังมองหา
Armentage

1
ตอนนี้ก็ยอมรับพารามิเตอร์เพิ่มเติมรูปแบบอื่นนอกเหนือจากการส่งออก XML เช่นดังนั้น: en.wiktionary.org/w/...
eenagy

4
อาจไม่ได้ผลตามที่คุณคาดหวังแม้ว่าen.wiktionary.org/wiki/Category:English_misspellings en.wiktionary.org/wiki/amatuer
endolith

ใช้: https://en.wiktionary.org/w/?curid=[page_id]&printable=yesเพื่อเปลี่ยนเส้นทางไปยังหน้า XHTML โดยใช้pageidไฟล์.
mie.ppa

2
จะกรองเฉพาะคำในภาษาอังกฤษใน API นี้ได้อย่างไร
Nadav B

28

มีข้อแม้บางประการในการตรวจสอบว่า 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 ด้วยตัวเองซึ่งไม่ใช่งานเล็กน้อย


2
สิ่งที่ฉันอยากทำจริงๆคือถ่ายโอนข้อมูลทั้งหมดในไซต์ Wikitionary ที่ไม่ใช่ภาษาอังกฤษจากนั้นเปลี่ยนเนื้อหาให้เป็นสิ่งที่ฉันสามารถใช้ได้ในพื้นที่ ตอนนี้ดูเหมือนงี่เง่า แต่ฉันหวังว่าฉันจะสามารถขอรายการคำทั้งหมดจากนั้นดึงคำจำกัดความ / คำแปลทีละคำได้ตามต้องการ
Armentage

1
การแก้ไข Caveat # 2 นั้นง่ายมาก: เพิ่มลง&prop=infoในแบบสอบถามและตรวจสอบการตอบสนองสำหรับredirectแอตทริบิวต์
svick

@svick: ใช่เป็นความจริง # 2 นั้นง่ายกว่าที่จะหลีกเลี่ยงเมื่อใช้ API แต่คำเตือนพื้นฐานเหล่านี้ยังครอบคลุมถึงการพยายามแยกวิเคราะห์ไฟล์ดัมพ์ข้อมูล Wiktionaryแม้ว่าคำถามนี้จะไม่ได้ถามถึงแนวทางนั้นก็ตาม
hippietrail

17

คุณสามารถดาวน์โหลดการถ่ายโอนข้อมูลของข้อมูลวิกิพจนานุกรม มีข้อมูลเพิ่มเติมในเรื่องคำถามที่พบบ่อย สำหรับวัตถุประสงค์ของคุณการถ่ายโอนข้อมูลคำจำกัดความอาจเป็นทางเลือกที่ดีกว่าดัมพ์ xml


2
ไฟล์ดัมพ์เหล่านี้มีขนาดใหญ่และไม่ชัดเจนว่าจะดาวน์โหลดไฟล์ใด (ทั้งหมดหรือไม่) อาจไม่ใช่สิ่งที่คนส่วนใหญ่มองหาพวกเขาเพียงแค่ต้องการค้นหาคำเพียงไม่กี่คำโดยใช้โปรแกรม
Cerin

1
ฉันอธิบายว่าไฟล์ใดที่จะดาวน์โหลด - นั่นคือการถ่ายโอนข้อมูลคำจำกัดความ (ไดเร็กทอรีจากลิงก์ของฉันเป็นเพียงไฟล์เวอร์ชันเดียวกัน) และใช่ถ้าคุณต้องการค้นหาคำโดยใช้โปรแกรมนี้เหมาะอย่างยิ่ง หากคุณสามารถรับประกันได้ว่าโปรแกรมจะดำเนินการทางออนไลน์เท่านั้นยังมีตัวเลือกอื่น ๆ อีก แต่ฉันกำลังตอบคำถามเดิมในส่วนนี้: "หรือมีวิธีใดบ้างที่ฉันสามารถดึงข้อมูลพจนานุกรมที่อยู่หลัง Wiktionary"
kybernetikos

18
ลิงก์การถ่ายโอนข้อมูลคำจำกัดความไม่พร้อมใช้งาน
live-love

8

เพื่อให้ง่ายจริงๆให้แยกคำจากการถ่ายโอนข้อมูลเช่นนี้:

bzcat pages-articles.xml.bz2 | grep '<title>[^[:space:][:punct:]]*</title>' | sed 's:.*<title>\(.*\)</title>.*:\1:' > words

ฉันจะรับสำเนา pages -icles.xml.bz2 ได้อย่างไร
Armentage

LANGwiktionary-DATE-pages-articles.xml.bz2มันเป็นเพียงแค่ชื่อทั่วไปฉันใช้เพื่ออธิบายการทิ้งของฟอร์ม ไปที่ลิงก์จากนั้นคลิกLANGwiktionary(LANG เช่น 'en', 'de' ... )
benroth

5

หากคุณใช้ 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')

1

คุณอาจต้องการลองใช้ JWKTL ฉันเพิ่งค้นพบเกี่ยวกับเรื่องนี้;)

http://en.wikipedia.org/wiki/Ubiquitous_Knowledge_Processing_Lab#Wiktionary_API

http://www.ukp.tu-darmstadt.de/software/jwktl/


1
การอ้างอิงที่คุณอ้างถึงนั้นเสีย นี่คือการเชื่อมโยงไปยังหน้า JWKTL ukp.tu-darmstadt.de/software/jwktl ไม่ใช่สิ่งที่ฉันเชื่อว่า OP กำลังมองหาอยู่
djskinner

1

ดังที่ได้กล่าวไว้ก่อนหน้านี้ปัญหาของแนวทางนี้คือวิกิพจนานุกรมให้ข้อมูลเกี่ยวกับคำทั้งหมดของภาษาทั้งหมด ดังนั้นวิธีตรวจสอบว่ามีเพจอยู่หรือไม่โดยใช้ Wikipedia API จะใช้ไม่ได้เพราะมีหน้าเว็บจำนวนมากสำหรับคำที่ไม่ใช่ภาษาอังกฤษ ในการเอาชนะสิ่งนี้คุณต้องแยกวิเคราะห์แต่ละหน้าเพื่อดูว่ามีส่วนที่อธิบายคำภาษาอังกฤษหรือไม่ การแยกวิเคราะห์ wikitext ไม่ใช่เรื่องเล็กน้อย แต่ในกรณีของคุณมันก็ไม่ได้แย่ขนาดนั้น เพื่อให้ครอบคลุมเกือบทุกกรณีคุณต้องตรวจสอบว่า wikitext มีEnglishหัวข้อหรือไม่ ขึ้นอยู่กับภาษาโปรแกรมที่คุณใช้คุณสามารถค้นหาเครื่องมือบางอย่างเพื่อสร้างAST ได้จาก wikitext ซึ่งจะครอบคลุมกรณีส่วนใหญ่ แต่ไม่ใช่ทั้งหมดเนื่องจาก Wiktionary มีการสะกดผิดที่พบบ่อย

อีกทางเลือกหนึ่งคุณสามารถลองใช้Lingua Robotหรือสิ่งที่คล้ายกัน Lingua Robot แยกวิเคราะห์เนื้อหา Wiktionary และจัดให้เป็น REST API การตอบสนองที่ไม่ว่างเปล่าหมายความว่ามีคำนั้นอยู่ โปรดทราบว่าในทางตรงกันข้ามกับ Wiktionary API นั้นไม่มีการสะกดผิดใด ๆ (อย่างน้อยก็ในขณะที่เขียนคำตอบนี้) โปรดทราบว่า Wiktionary ไม่เพียง แต่ประกอบด้วยคำศัพท์เท่านั้น แต่ยังมีนิพจน์หลายคำด้วย



0

นี่คือจุดเริ่มต้นในการแยกวิเคราะห์นิรุกติศาสตร์และข้อมูลการออกเสียง:

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}}
}

อัปเดต : นี่คือส่วนสำคัญที่มีเนื้อมากขึ้น


ขอบคุณพยายามเรียกใช้ภายในคอนโซล devtools ของเบราว์เซอร์ คือlangsอะไร?
knb

1
อัปเดตด้วยส่วนสำคัญlangsคือไม่กี่พันบรรทัดใหญ่เกินไปสำหรับ SO
Lance Pollard
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.