ฉันจะนำหน้าคำด้วย“ a” และ“ an” ให้ถูกต้องได้อย่างไร


94

ฉันมีแอปพลิเคชั่น. NET ที่หากมีคำนามฉันต้องการให้มันนำหน้าคำนั้นด้วย "a" หรือ "an" อย่างถูกต้อง ฉันจะทำอย่างไร

ก่อนที่คุณจะคิดว่าคำตอบคือเพียงตรวจสอบว่าตัวอักษรตัวแรกเป็นสระหรือไม่ให้พิจารณาวลีต่างๆเช่น:

  • ความผิดพลาดโดยสุจริต
  • รถมือสอง

4
นอกจากนี้คุณยังต้องพิจารณาคำย่อที่อาจทำให้เกิดความสับสนในท่า "a" หรือ "an" เหมือน "NHL" ที่มีเสียงของตัวอักษรขึ้นต้นด้วยเสียงสระแม้ว่าจะไม่สามารถออกเสียงคำย่อเป็นคำเช่นนั้นได้ เป็น "อุปกรณ์ NAS" หรือ "เหตุการณ์ NASCAR"
JB King

5
โปรดทราบว่าการใช้ a หรือ can ขึ้นอยู่กับการออกเสียงเฉพาะในความหลากหลายของภาษาอังกฤษที่พูด การออกเสียงสมุนไพรอังกฤษและอเมริกันเป็นตัวอย่างหนึ่ง
Eric

12
@Eric: อันที่จริงตัวอย่างที่ฉันชอบที่สุดในเรื่องนี้คือ "SQL" บางคนพูดว่าตัวอักษร "SQL" บางคนออกเสียงเหมือนคำว่า "sequel" แต่ละรายการจะได้รับ "a" หรือ "an" ที่แตกต่างกัน เช่น "คำสั่งภาคต่อ" ข้อ "มันเป็นคำสั่ง SQL"
Binary Worrier

สิ่งที่ยากกว่านั้นคือความคิดเห็นยังแตกต่างกันไปในภาษาอังกฤษถิ่นเดียวกันด้วยซ้ำ! ตัวอย่างเช่นภาษาอังกฤษที่เป็นทางการ (สหราชอาณาจักร) บอกเราว่า "โรงแรม" เป็นโครงสร้างที่ถูกต้อง แต่คนส่วนใหญ่จะใช้ "โรงแรม" ในการสนทนาในชีวิตประจำวัน ถ้าคุณเขียนมันจะมีประโยชน์มากสำหรับพวกเราที่เหลือ!
h4xxr

อ่า ... "ผู้ปรารถนา H". ฉันจำได้อย่างชัดเจนว่าพบครั้งแรกกับมัน หนังสือสังคมศึกษาชั้นประถมศึกษาปีที่ 2 ชื่อ "An Historical Society" หนังสือเกี่ยวกับวิลเลียมสเบิร์กยุคอาณานิคม
Bob Kaufman

คำตอบ:


137
  1. ดาวน์โหลด Wikipedia
  2. คลายซิปและเขียนโปรแกรมตัวกรองด่วนที่แยกเฉพาะข้อความบทความ (โดยทั่วไปการดาวน์โหลดจะอยู่ในรูปแบบ XML พร้อมกับข้อมูลเมตาที่ไม่ใช่บทความด้วย)
  3. ค้นหาอินสแตนซ์ทั้งหมดของ a (n) .... และสร้างดัชนีสำหรับคำต่อไปนี้และคำนำหน้าทั้งหมด (คุณสามารถใช้คำต่อท้ายง่ายๆสำหรับสิ่งนี้) ควรพิจารณาตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และคุณจะต้องมีความยาวคำไม่เกิน 15 ตัวอักษร?
  4. (ไม่บังคับ) ทิ้งคำนำหน้าทั้งหมดที่เกิดขึ้นน้อยกว่า 5 ครั้งหรือในกรณีที่ "a" vs. "an" บรรลุส่วนใหญ่น้อยกว่า 2/3 (หรือเกณฑ์อื่น ๆ - ปรับแต่งที่นี่) ควรเว้นคำนำหน้าที่ว่างไว้เพื่อหลีกเลี่ยงกรณีมุม
  5. คุณสามารถเพิ่มประสิทธิภาพฐานข้อมูลคำนำหน้าของคุณได้โดยการละทิ้งคำนำหน้าทั้งหมดที่มีคำอธิบายประกอบ "a" หรือ "an" เดียวกัน
  6. เมื่อพิจารณาว่าจะใช้ "A" หรือ "AN" ให้ค้นหาคำนำหน้าที่ตรงกันที่ยาวที่สุดและทำตามคำนำหน้า หากคุณไม่ได้ทิ้งคำนำหน้าว่างในขั้นตอนที่ 4 จะมีคำนำหน้าที่ตรงกันเสมอ (คือคำนำหน้าที่ว่างเปล่า) มิฉะนั้นคุณอาจต้องใช้กรณีพิเศษสำหรับสตริงที่ไม่ตรงกันทั้งหมด (ข้อมูลดังกล่าวน่าจะหายากมาก) .

คุณอาจจะไม่ดีไปกว่านี้ - และแน่นอนว่ามันจะเอาชนะระบบที่อิงกฎส่วนใหญ่ได้

แก้ไข:ฉันได้ดำเนินการใน JS / C # คุณสามารถทดลองใช้ในเบราว์เซอร์ของคุณหรือดาวน์โหลดการใช้งานจาวาสคริปต์ขนาดเล็กที่ใช้ซ้ำได้ที่ใช้ การดำเนินการ NET เป็นแพคเกจAvsAnใน nuget การใช้งานเป็นเรื่องเล็กน้อยดังนั้นจึงควรง่ายต่อการพอร์ตไปยังภาษาอื่น ๆ หากจำเป็น

ปรากฎว่า "กฎ" ค่อนข้างซับซ้อนกว่าที่คิด:

  • มันเป็นผลที่ไม่คาดคิด แต่ก็คะแนนเสียงเป็นเอกฉันท์
  • มันเป็นตัดสินใจซื่อสัตย์ แต่ไม้พุ่มสายน้ำผึ้ง
  • สัญลักษณ์: มันหมายเลข 0800 หรือ∞ของออริกาโน
  • คำย่อ: เป็นนักวิทยาศาสตร์ของ NASA แต่เป็นนักวิเคราะห์ของ NSA รถยนต์ FIAT แต่นโยบายจอห์นฟา

... ซึ่งจะขีดเส้นใต้ว่าระบบที่ใช้กฎจะสร้างได้ยาก!


และถ้าคำนามหายไปจากผลลัพธ์นี้คุณสามารถถอยกลับไปใช้กลไกกฎง่ายๆได้อย่างแน่นอน
John Fisher

27
เนื่องจากการดาวน์โหลด Wikipedia คลายการบีบอัดเป็น (ปัจจุบัน) 2.8 เทราไบต์จะเป็นการดีมากหากใครก็ตามที่ใช้วิธีนี้จะโพสต์ข้อมูลที่เป็นผลลัพธ์ต่อสาธารณะเพื่อให้กระบวนการนี้ไม่ต้องทำซ้ำมากนัก
Nathan Long

10
คำตอบนี้ไม่ได้ร้ายแรงทั้งหมด แต่ฉันได้ทำสิ่งนี้แล้วและไฟล์. xml ของ wikipedia พร้อม wikimarkup แบบดิบนั้นอยู่ในลำดับที่ 40GB (อันใหม่ล่าสุดมักจะใหญ่กว่าเล็กน้อย) ไม่ใช่ 2.8TB - ทั้งหมดในไฟล์เดียว - อย่าดาวน์โหลดเวอร์ชัน. html แบบขยายหรือรูปภาพใด ๆ อาจเป็นเวอร์ชัน 2.8TB ไม่ว่าในกรณีใดมันค่อนข้างเป็นไปได้ที่จะแยกวิเคราะห์ตราบเท่าที่คุณไม่จู้จี้จุกจิกเกี่ยวกับมาร์กอัป
Eamon Nerbonne

1
เป็นหนึ่งในชุดข้อมูลภาษาธรรมชาติที่มีให้ใช้งานง่ายและทันสมัยที่สุดเท่าที่ฉันคิดได้ อย่างไรก็ตามแหล่งข้อมูลเพิ่มเติมใด ๆ ก็ใช้ได้เช่นกันอัลกอริทึมไม่ได้ขึ้นอยู่กับวิกิพีเดีย แต่อย่างใด คุณสามารถทดลองใช้งานออนไลน์ได้ที่home.nerbonne.org/A-vs-Anหรือบล็อกของฉัน
Eamon Nerbonne

1
ผมก็เกินความประทับใจจากการแก้ปัญหานี้ ฉันคิดตามตรงว่ามันจะง่ายกว่าการดาวน์โหลด Wikipedia อย่างครบถ้วน ทำได้ดีครับ +1
Kehlan Krumme

15

คุณต้องใช้รายการข้อยกเว้น ฉันไม่คิดว่าข้อยกเว้นทั้งหมดจะถูกกำหนดไว้อย่างดีเพราะบางครั้งมันก็ขึ้นอยู่กับสำเนียงของคนที่พูดคำนั้น

วิธีที่โง่อย่างหนึ่งคือขอความเป็นไปได้สองอย่างจาก Google (โดยใช้หนึ่งใน API การค้นหา) และใช้สิ่งที่เป็นที่นิยมที่สุด

หรือ:

ดังนั้น "ยุโรป" และ "ซื่อสัตย์" จึงเป็นเวอร์ชันที่ถูกต้อง


6
อนุญาตให้ใช้จริงหรือนี่ขอให้ถูกแบน? การใช้งานดังกล่าวเป็นประจำจะต้องคำนึงถึง IIRC อย่างแน่นอน
Eamon Nerbonne

1
@Eamon: จุดที่น่าสนใจ จะเกิดอะไรขึ้นถ้าแอปพลิเคชันเก็บบันทึกคำทั้งหมดที่เคย googled ไว้ก่อนหน้านี้ดังนั้น Google จะต้องใช้เพียงครั้งเดียวสำหรับแต่ละคำใหม่ที่พบ นั่นยังเป็นการใช้งาน Google ที่น่าสงสัยหรือไม่
gnovice

2
นอกเหนือจากปัญหาทางเทคนิคที่เห็นได้ชัด (ไม่อนุญาตให้ใช้เอาต์พุตของเครื่องมือค้นหาในลักษณะอัตโนมัติเช่นนี้และจะถูกบล็อกค่อนข้างเร็ว) สิ่งนี้ไม่ได้ช่วยแก้ปัญหาด้วยวิธีที่ถูกต้อง - อย่างเลวร้ายที่สุดก็จะซ้ำกันในทางที่ผิด ไวยากรณ์
Guss

6
ที่เลวร้ายที่สุด? มีข้อโต้แย้งที่ค่อนข้างชัดเจนว่าการทำซ้ำ "การใช้ในทางที่ผิด" เป็นสิ่งที่ระบบภาษาธรรมชาติควรพยายามอย่างยิ่ง ดู David Foster วอลเลซเรียงความ "ผู้มีอำนาจและการใช้อเมริกัน" ในพิจารณากุ้งก้ามกราม มีองค์กรที่ดีกว่าที่จะใช้ Google แต่นั่นเป็นปัญหาที่แตกต่างออกไป
Robert Rossney

2
"โรงแรม" และ "นางเอก" ทั้งคู่ดูเหมือนจะเหมาะกับฉัน ฉันเดาว่าคุณมาจากมุมมองที่เน้นเสียงเล็กน้อย สำเนียงที่แตกต่างกันหมายความว่าไม่มีคำตอบที่ถูกต้องสำหรับบางคำเหล่านี้
rjmunro

15

หากคุณสามารถค้นหาแหล่งที่มาของการสะกดคำเพื่อออกเสียงคำเช่น:

"honest":"on-ist"
"horrible":"hawr-uh-buhl, hor-"

คุณสามารถพิจารณาจากอักขระตัวแรกของสตริงการออกเสียงที่สะกดได้ สำหรับประสิทธิภาพบางทีคุณอาจใช้การค้นหาดังกล่าวเพื่อสร้างชุดข้อยกเว้นล่วงหน้าและใช้ชุดการค้นหาที่เล็กลงในระหว่างการดำเนินการแทน

แก้ไขเพื่อเพิ่ม:

!!! - ฉันคิดว่าคุณสามารถใช้สิ่งนี้เพื่อสร้างข้อยกเว้นของคุณ: http://www.speech.cs.cmu.edu/cgi-bin/cmudict

แน่นอนว่าไม่ใช่ทุกอย่างที่จะอยู่ในพจนานุกรม - หมายความว่าไม่มีข้อยกเว้นที่เป็นไปได้ทุกอย่างที่จะจบลงในชุดข้อยกเว้นของคุณ - แต่ในกรณีนี้คุณสามารถตั้งค่าเริ่มต้นเป็นสระ / a สำหรับพยัญชนะหรือใช้ฮิวริสติกอื่น ๆ ที่มีโอกาสดีกว่า

(เมื่อดูจากพจนานุกรมของมช. ฉันรู้สึกยินดีที่เห็นว่ามีคำนามที่เหมาะสมสำหรับประเทศและสถานที่อื่น ๆ - ดังนั้นจะมีตัวอย่างเช่น "a Ukrainian", "a USA Today paper", "a Urals-inspired painting")

การแก้ไขอีกครั้งเพื่อเพิ่ม: พจนานุกรม CMU ไม่มีคำย่อทั่วไปและคุณต้องกังวลเกี่ยวกับคำที่ขึ้นต้นด้วย s, f, l, m, n, u และ x แต่มีรายการตัวย่อมากมายเช่นใน Wikipedia ซึ่งคุณสามารถใช้เพื่อเพิ่มข้อยกเว้นได้


2
ช่วยตัวเองไม่ได้ แต่hawr-uh-buhlทำให้ฉันหัวเราะได้เสมอ
IllidanS4 รองรับ Monica

9

คุณต้องดำเนินการด้วยตนเองและเพิ่มข้อยกเว้นที่คุณต้องการเช่นหากตัวอักษรตัวแรกเป็น 'H' และตามด้วย 'O' เช่นซื่อสัตย์ชั่วโมง ... และตัวตรงข้ามเช่นยุโรปมหาวิทยาลัยใช้ ...


1
ใช่ผู้ชายที่แท้จริง ฉันเดาว่าฉันเข้าใจผิดในเรื่องนั้น ไม่มีกฎเลย
Ahmad Farid

8

เนื่องจาก "a" และ "an" ถูกกำหนดโดยกฎการออกเสียงและไม่ใช่รูปแบบการสะกดฉันจึงอาจทำเช่นนี้:

  1. ถ้าตัวอักษรตัวแรกของคำเป็นพยัญชนะ -> 'a'
  2. หากอักษรตัวแรกของคำเป็นสระ -> 'an'
  3. เก็บรายชื่อของข้อยกเว้น (หัวใจ x-ray, บ้าน) เป็นrjumnro กล่าวว่า

5

คุณต้องดูกฎทางไวยากรณ์สำหรับบทความที่ไม่มีกำหนด (มีเพียงสองบทความในไวยากรณ์ภาษาอังกฤษ "a" และ "an) คุณอาจไม่เห็นด้วยว่าเสียงเหล่านี้ถูกต้อง แต่กฎของไวยากรณ์ภาษาอังกฤษมีความชัดเจนมาก :

"คำว่า a และ a เป็นบทความที่ไม่มีกำหนดเราใช้บทความที่ไม่มีกำหนดก่อนคำที่ขึ้นต้นด้วยเสียงสระ (a, e, i, o, u) และบทความที่ไม่มีกำหนด a ก่อนคำที่ขึ้นต้นด้วยเสียงพยัญชนะ (ทั้งหมด ตัวอักษรอื่น ๆ ) "

หมายเหตุที่นี้หมายถึงสระเสียงและไม่เป็นสระเสียงตัวอักษร ตัวอย่างเช่นคำที่ขึ้นต้นด้วย "h" ที่เงียบเช่น "เกียรติ" หรือ "ทายาท" จะถือว่าเป็นเสียงสระและจะใช้ "an" - เช่น "เป็นเกียรติที่ได้พบคุณ" คำที่ขึ้นต้นด้วยเสียงพยัญชนะนำหน้าด้วย a - ซึ่งเป็นสาเหตุที่คุณพูดว่า "รถมือสอง" แทนที่จะเป็น "รถมือสอง" - เนื่องจาก "used" มีเสียง "yoose" แทนที่จะเป็นเสียง "uhh"

ดังนั้นในฐานะโปรแกรมเมอร์สิ่งเหล่านี้คือกฎที่ต้องปฏิบัติตาม คุณเพียงแค่ต้องหาวิธีพิจารณาว่าคำขึ้นต้นด้วยเสียงอะไรแทนที่จะเป็นตัวอักษร ฉันเคยเห็นตัวอย่างเช่นนี้ใน PHPโดย Jaimie Sirovich:

function aOrAn($next_word) 
{ 
    $_an = array('hour', 'honest', 'heir', 'heirloom'); 
    $_a = array('use', 'useless', 'user'); 
    $_vowels = array('a','e','i','o','u'); 

    $_endings = array('ly', 'ness', 'less', 'lessly', 'ing', 'ally', 'ially'); 
    $_endings_regex = implode('|', $_endings); 

    $tmp = preg_match('#(.*?)(-| |$)#', $next_word, $captures); 
    $the_word = trim($captures[1]); 
    //$the_word = Format::trimString(Utils::pregGet('#(.*?)(-| |$)#', $next_word, 1)); 

    $_an_regex = implode('|', $_an); 
    if (preg_match("#($_an_regex)($_endings_regex)#i", $the_word)) { 
        return 'an'; 
    } 

    $_a_regex = implode('|', $_a); 
    if (preg_match("#($_a_regex)($_endings_regex)#i", $the_word)) { 
        return 'a'; 
    } 

    if (in_array(strtolower($the_word{0}), $_vowels)) { 
        return 'an';     
    } 

    return 'a'; 
}

อาจง่ายที่สุดในการสร้างกฎจากนั้นสร้างรายการข้อยกเว้นและใช้สิ่งนั้น ฉันไม่คิดว่าจะมีมากมายขนาดนั้น


4

ผู้ชายฉันรู้ว่านี่อาจเป็นข้อโต้แย้งที่ตัดสินได้ แต่ฉันคิดว่ามันสามารถตัดสินได้ง่ายกว่าการใช้กฎไวยากรณ์เฉพาะกิจจากวิกิพีเดียซึ่งจะได้รับไวยากรณ์ภาษาพื้นถิ่นที่ดีที่สุด

ดูเหมือนว่าทางออกที่ดีที่สุดคือการใช้ a หรือทริกเกอร์การจับคู่ตามหน่วยเสียงของคำต่อไปนี้โดยมีหน่วยเสียงบางส่วนเชื่อมโยงกับ "an" เสมอและส่วนที่เหลือเป็นของ "a"

มหาวิทยาลัย Carnegie Mellon มีเครื่องมือออนไลน์ที่ยอดเยี่ยมสำหรับการตรวจสอบประเภทนี้ - http://www.speech.cs.cmu.edu/cgi-bin/cmudict - และมีคำ 125k พร้อมด้วย 39 หน่วยเสียงที่ตรงกัน การเสียบคำเข้าทำให้ชุดการออกเสียงทั้งหมดซึ่งมีเพียงคำแรกเท่านั้นที่สำคัญ

หากคำนั้นไม่ปรากฏในพจนานุกรมเช่น "NSA" และเป็นตัวพิมพ์ใหญ่ทั้งหมดระบบจะถือว่าคำนั้นเป็นตัวย่อและใช้ตัวอักษรตัวแรกเพื่อพิจารณาว่าจะใช้บทความใดไม่ จำกัด ตามกฎเดิมที่ตั้งไว้


1
ในแง่ของเศรษฐกิจทรัพยากรนี่เป็นคำตอบที่ดีที่สุดและฉันไม่เห็นว่าทำไมสิ่งนี้ถึงได้ผลแย่ไปกว่าวิธีการที่ใช้ข้อมูลจำนวนมากที่เสนอ
Chthonic Project

3

@ นาธานลอง: การดาวน์โหลดวิกิพีเดียไม่ใช่ความคิดที่แย่ ไม่จำเป็นต้องใช้รูปภาพวิดีโอและสื่ออื่น ๆ ทั้งหมด

ฉันเขียนโปรแกรม (เส็งเคร็ง) ใน php และ javascript (!) เพื่ออ่านวิกิพีเดียภาษาสวีเดนทั้งหมด (หรืออย่างน้อย aricles ทั้งหมดที่สามารถเข้าถึงได้จาก aricle เกี่ยวกับคณิตศาสตร์ซึ่งเป็นจุดเริ่มต้นสำหรับแมงมุมของฉัน)

ฉันรวบรวมคำและลิงค์ภายในทั้งหมดไว้ในฐานข้อมูลและยังติดตามความถี่ของทุกคำ ตอนนี้ฉันใช้เป็นฐานข้อมูลคำสำหรับงานต่างๆ: * การค้นหาคำทั้งหมดที่สามารถสร้างจากชุดตัวอักษรที่กำหนด (รวมถึงสัญลักษณ์แทน) * สร้างไฟล์ไวยากรณ์ง่ายๆสำหรับภาษาสวีเดน (ทุกคำที่ไม่อยู่ในฐานข้อมูลถือว่าไม่ถูกต้อง)

โอ้และการดาวน์โหลด wiki ทั้งหมดใช้เวลาประมาณหนึ่งสัปดาห์โดยใช้แล็ปท็อปของฉันทำงานเกือบตลอดเวลาโดยมีการเชื่อมต่อ 10Mbit

เมื่อคุณอยู่ที่นั่นให้บันทึกเหตุการณ์ทั้งหมดที่ไม่สอดคล้องกับภาษาอังกฤษและดูว่าบางเหตุการณ์ผิดพลาดหรือไม่ ไปแก้ไขและให้บางสิ่งกลับคืนสู่ชุมชน


2

โปรดทราบว่ามีความแตกต่างระหว่างภาษาถิ่นของอเมริกาและอังกฤษดังที่ Grammar Girl ชี้ให้เห็นในตอนA Versus An ของเธอ

ภาวะแทรกซ้อนอย่างหนึ่งคือเมื่อคำต่างๆออกเสียงในภาษาอังกฤษแบบอังกฤษและแบบอเมริกันต่างกัน ตัวอย่างเช่นคำของพืชบางชนิดออกเสียงว่า "erb" ในภาษาอังกฤษแบบอเมริกันและ "สมุนไพร" ในภาษาอังกฤษแบบบริติช ในกรณีที่เกิดปัญหาไม่บ่อยนักให้ใช้แบบฟอร์มที่คาดว่าจะเกิดขึ้นในประเทศของคุณหรือโดยผู้อ่านส่วนใหญ่ของคุณ



2

ฉันได้ย้ายฟังก์ชั่นจากPython (เดิมมาจากแพ็คเกจ CPAN Lingua-EN-Inflect) ที่กำหนดเสียงสระใน C # อย่างถูกต้องและโพสต์เป็นคำตอบสำหรับคำถามโดยทางโปรแกรมจะกำหนดว่าจะอธิบายวัตถุด้วย a หรือ? . คุณสามารถดูข้อมูลโค้ดที่นี่


1

คุณขอพจนานุกรมภาษาอังกฤษที่เก็บคำที่เขียนด้วยตัวอักษรปกติของเราและอักษรโฟนีติกสากลได้ไหม

จากนั้นใช้วิชาฟิสิกส์เพื่อหาเสียงเริ่มต้นของคำและด้วยเหตุนี้ว่า "a" หรือ "an" เหมาะสมหรือไม่?

ไม่แน่ใจว่าวิธีนี้จะง่ายกว่า (หรือสนุกพอ ๆ กับ) วิธีการทางสถิติของ Wikipedia


0

ฉันจะใช้อัลกอริทึมที่อิงตามกฎเพื่อให้ครอบคลุมมากที่สุดเท่าที่จะทำได้จากนั้นใช้รายการข้อยกเว้น หากคุณต้องการจินตนาการคุณสามารถลองกำหนด "กฎ" ใหม่ ๆ จากรายการข้อยกเว้นของคุณ


0

ฉันดูเหมือนชุดของฮิวริสติกส์ มันต้องซับซ้อนกว่านี้หน่อยและตอบโจทย์บางอย่างซึ่งฉันไม่เคยได้คำตอบที่ดีมาก่อนเช่นคุณใช้ตัวย่ออย่างไร ("a RPM" หรือ "an RPM" ฉันคิดเสมอว่าอันหลังเหมาะสมกว่า)

การค้นหาอย่างรวดเร็วให้ผลในไลบรารีภาษาที่พูดถึงวิธีจัดการคำนำหน้าเอกพจน์ภาษาอังกฤษ แต่คุณอาจพบบางสิ่งบางอย่างหากคุณขุดได้มากพอ และถ้าไม่คุณสามารถเขียนไลบรารีการผันคำของคุณเองและรับชื่อเสียงระดับโลกได้ตลอดเวลา :-)


ตัวย่ออย่าง RPM ไม่ใช่ปัญหา อย่างที่คุณบอกว่ารักษาได้ไม่ว่าจะด้วยวิธีใดก็ตาม ดังนั้นวิธีแก้ปัญหาจึงชัดเจน: ไม่ต้องสนใจพวกเขา
Andrew J.Brehm

ฉันไม่เห็นด้วยเพราะนั่นทำให้คำนำหน้าไม่สอดคล้องกัน การเพิกเฉยต่อมันจะทำให้เกิด "a RPM" และ "an UGC" ซึ่งผิดอย่างชัดเจน
Guss

0

ฉันไม่คิดว่าคุณจะเติมจานหม้อไอน้ำบางอย่างเช่น 'a / an' เป็นขั้นตอนเดียวได้ทั้งหมด มิฉะนั้นคุณจะจบลงด้วยข้อผิดพลาดในการสันนิษฐานเช่นทุกคำที่มี 'h' ดำเนินการโดย 'o' get 'an' แทน 'a' like 'home' - (บ้าน? โดยพื้นฐานแล้วคุณจะต้องรวมตรรกะของภาษาอังกฤษหรือบางครั้งอาจพบกรณีที่หายากที่จะทำให้คุณดูโง่เขลา


0

ตรวจสอบว่าคำขึ้นต้นด้วยสระหรือพยัญชนะ โดยทั่วไปแล้ว "u" เป็นพยัญชนะและสระ ("yu") จึงอยู่ในกลุ่มพยัญชนะตามวัตถุประสงค์ของคุณ

ตัวอักษร "h" ย่อมาจาก gottal stop (พยัญชนะ) ในภาษาฝรั่งเศสและในคำภาษาฝรั่งเศสที่ใช้ในภาษาอังกฤษ คุณสามารถสร้างรายชื่อของสิ่งเหล่านี้ (อันที่จริงรวมถึง "เกียรติ" "เกียรติ" และ "ชั่วโมง" อาจเพียงพอ) และนับว่าเริ่มต้นด้วยเสียงสระ (เนื่องจากภาษาอังกฤษไม่รู้จักการหยุดเสียง)

ยังนับ "eu" เป็นพยัญชนะเป็นต้น

ก็ไม่ยากเกินไป


0

การเลือก a หรือ a ขึ้นอยู่กับวิธีการออกเสียงของคำ การดูคำนั้นคุณไม่สามารถบอกการออกเสียงที่ถูกต้องได้เช่นศัพท์แสงหรือคำย่อเป็นต้นวิธีหนึ่งคือการมีพจนานุกรมที่รองรับหน่วยเสียงและใช้ข้อมูลหน่วยเสียงที่เกี่ยวข้องกับคำนั้นเพื่อตรวจสอบว่า "a "หรือ" an "ควรใช้


0

ฉันไม่แน่ใจว่าข้อมูลนี้มีข้อมูลที่เหมาะสมเพื่อแยกความแตกต่างของ "a" และ "an" แต่ฐานข้อมูลWordNetของ Princeton มีอยู่อย่างแม่นยำเพื่อจุดประสงค์ของงานประเภทเดียวกันดังนั้นฉันจึงคิดว่ามีข้อมูลอยู่ในนั้น . มีคำหลายหมื่นคำและความสัมพันธ์หลายแสนระหว่างคำที่กล่าว (IIRC ฉันไม่พบสถิติปัจจุบันในไซต์) ให้มันดู ดาวน์โหลดได้อย่างอิสระ


0

อย่างไร? แล้วเมื่อไหร่? รับคำนามพร้อมแนบบทความ ขอในรูปแบบเฉพาะ

ขอคำนามกับบทความ MUD codebase จำนวนมากเก็บไอเท็มไว้เป็นข้อมูลประกอบด้วย:

  • คำหลักอย่างน้อยหนึ่งคำ
  • แบบสั้น ๆ
  • แบบยาว

แบบฟอร์มคำหลักอาจเป็น "ดาบสั้นสนิม" แบบสั้นจะเป็น "ดาบ" แบบยาวจะเป็น "ดาบสั้นขึ้นสนิม"

คุณกำลังเขียนเว็บเซอร์วิสแบบ "a vs. an" หรือไม่? ย้อนกลับไปดูว่าคุณสามารถโจมตีการรั่วไหลนี้ต่อไปที่ต้นน้ำได้หรือไม่ คุณสามารถสร้างเขื่อนได้ แต่ถ้าคุณไม่หยุดไหลมันก็จะล้นออกมาในที่สุด

พิจารณาว่าสิ่งนี้มีความสำคัญเพียงใดและตามที่คนอื่น ๆ แนะนำให้ไปที่ "รวดเร็ว แต่หยาบ" หรือ "แพง แต่ทนทาน"


0

กฎง่ายมาก ถ้าคำถัดไปขึ้นต้นด้วยเสียงสระให้ใช้ 'an' ถ้าขึ้นต้นด้วยพยัญชนะให้ใช้ 'a' สิ่งที่ยากคือการจำแนกสระและพยัญชนะในโรงเรียนของเราไม่ได้ผล 'h' in 'honor' เป็นเสียงสระ แต่ 'h' ใน 'hospital' เป็นพยัญชนะ

ที่แย่ไปกว่านั้นคือคำบางคำเช่น 'ซื่อสัตย์' เริ่มต้นด้วยสระหรือพยัญชนะขึ้นอยู่กับว่าใครเป็นคนพูด ที่แย่ไปกว่านั้นคือคำบางคำเปลี่ยนไปขึ้นอยู่กับคำรอบตัวของผู้พูดบางคน

ปัญหามีขอบเขตอยู่ที่ระยะเวลาและความพยายามที่คุณต้องการเท่านั้น คุณสามารถเขียนอะไรเป็นคู่ ๆ โดยใช้ 'aeiou' เป็นเสียงสระได้ในสองสามนาทีหรือคุณอาจใช้เวลาหลายเดือนในการวิเคราะห์กลุ่มเป้าหมายของคุณ ระหว่างพวกเขาเป็นฮิวริสติกส์จำนวนมากซึ่งจะถูกต้องสำหรับผู้พูดบางคนและไม่ถูกต้องสำหรับผู้อื่น - แต่เนื่องจากผู้พูดที่แตกต่างกันมีการกำหนดที่แตกต่างกันสำหรับคำเดียวกันจึงเป็นไปไม่ได้ที่จะถูกต้องตลอดเวลาไม่ว่าคุณจะทำอย่างไร มัน.


0

แนวทางที่ดีที่สุดคือการค้นหาสถานที่ทางออนไลน์ที่สามารถให้คำตอบค้นหาแบบไดนามิกและแคชคำตอบ คุณสามารถกำหนดระบบด้วยคำไม่กี่ร้อยคำเพื่อเริ่มต้น

(ฉันไม่รู้แหล่งข้อมูลออนไลน์แบบนี้ แต่ฉันจะไม่แปลกใจเลยถ้ามี)


0

ดังนั้นวิธีแก้ปัญหาที่สมเหตุสมผลจึงเป็นไปได้โดยไม่ต้องดาวน์โหลดอินเทอร์เน็ตทั้งหมด นี่คือสิ่งที่ฉันทำ:

ผมจำได้ว่า Google ตีพิมพ์ข้อมูลดิบของพวกเขาสำหรับความถี่ Google หนังสือ N-แกรมที่นี่ ฉันจึงดาวน์โหลดไฟล์ขนาด 2 กรัมสำหรับ "a_" และ "an" ประมาณ 26 กิ๊กถ้าจำไม่ผิด จากนั้นฉันได้สร้างรายการสตริงที่พวกเขานำหน้าอย่างท่วมท้นด้วยบทความตรงข้ามที่คุณคาดหวัง (ถ้าเราคาดหวังว่าสระจะใช้ "an") รายการคำสุดท้ายนั้นฉันสามารถจัดเก็บได้ภายใน 7 กิโลไบต์


-2

คุณใช้ "a" เมื่อใดก็ตามที่คำถัดไปไม่ใช่สระ? และคุณใช้ "an" เมื่อใดก็ตามที่มีสระ?

จากที่กล่าวมาคุณไม่สามารถใช้นิพจน์ทั่วไปเช่น "a \ s [a, e, i, o, u] *" ได้หรือไม่? แล้วแทนที่ด้วย "an?"


ไม่มีเพราะกฎเป็นเรื่องเกี่ยวกับสระเสียงไม่เสียงสระตัวอักษร "ผู้ใช้" เริ่มต้นด้วยเสียงสระ แต่ออกเสียงไม่ได้
Joris Groosman
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.