portaldacalheta.pt
  • หลัก
  • การจัดการวิศวกรรม
  • Kpi และ Analytics
  • เทคโนโลยี
  • ว่องไว
เทคโนโลยี

วิธีสร้างแอปประมวลผลภาษาธรรมชาติ



การประมวลผลภาษาธรรมชาติซึ่งเป็นเทคโนโลยีที่ช่วยให้แอปพลิเคชันซอฟต์แวร์ประมวลผลภาษามนุษย์ได้กลายเป็นที่แพร่หลายพอสมควรในช่วงไม่กี่ปีที่ผ่านมา

การค้นหาของ Google สามารถตอบคำถามที่ฟังดูเป็นธรรมชาติมากขึ้นเรื่อย ๆ Siri ของ Apple สามารถเข้าใจคำถามที่หลากหลายและมี บริษัท จำนวนมากขึ้นเรื่อย ๆ ที่ใช้การแชทอัจฉริยะและบอทโทรศัพท์เพื่อสื่อสารกับลูกค้า แต่ซอฟต์แวร์ที่ดูเหมือน 'ฉลาด' นี้ทำงานอย่างไร





ในบทความนี้คุณจะได้เรียนรู้เกี่ยวกับเทคโนโลยีที่ทำให้แอปพลิเคชันเหล่านี้เป็นประโยชน์และคุณจะได้เรียนรู้วิธีการพัฒนาซอฟต์แวร์ประมวลผลภาษาธรรมชาติของคุณเอง



บทความนี้จะแนะนำคุณตลอดขั้นตอนตัวอย่างในการสร้างตัววิเคราะห์ความเกี่ยวข้องของข่าว ลองนึกภาพคุณมีพอร์ตหุ้นและคุณต้องการให้แอปรวบรวมข้อมูลผ่านเว็บไซต์ข่าวยอดนิยมโดยอัตโนมัติและระบุบทความที่เกี่ยวข้องกับพอร์ตโฟลิโอของคุณ ตัวอย่างเช่นหากพอร์ตการลงทุนหุ้นของคุณมี บริษัท ต่างๆเช่น Microsoft, BlackStone และ Luxottica คุณต้องการดูบทความที่กล่าวถึง บริษัท ทั้งสามนี้

เริ่มต้นใช้งานห้องสมุด Stanford NLP

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



สำหรับตัวอย่างของเราเราจะใช้ไฟล์ ห้องสมุด Stanford NLP ซึ่งเป็นไลบรารีการประมวลผลภาษาธรรมชาติที่ใช้ Java ที่มีประสิทธิภาพซึ่งมาพร้อมกับการสนับสนุนหลายภาษา

อัลกอริทึมเฉพาะจากไลบรารีนี้ที่เราสนใจคือตัวติดแท็กส่วนหนึ่งของคำพูด (POS) POS tagger ใช้เพื่อกำหนดส่วนของคำพูดให้กับทุกคำในข้อความโดยอัตโนมัติ POS tagger นี้จำแนกคำในข้อความตามคุณสมบัติศัพท์และวิเคราะห์โดยสัมพันธ์กับคำอื่น ๆ รอบตัว



กลไกที่แน่นอนของอัลกอริทึม POS tagger อยู่นอกเหนือขอบเขตของบทความนี้ แต่คุณสามารถเรียนรู้เพิ่มเติมได้ ที่นี่ .

ในการเริ่มต้นเราจะสร้างโปรเจ็กต์ Java ใหม่ (คุณสามารถใช้ IDE ที่คุณชื่นชอบได้) และเพิ่มไลบรารี Stanford NLP ในรายการการอ้างอิง หากคุณใช้ Maven เพียงเพิ่มลงใน pom.xml ของคุณ ไฟล์:

ลำดับชั้นภาพในการออกแบบเว็บ
edu.stanford.nlp stanford-corenlp 3.6.0 edu.stanford.nlp stanford-corenlp 3.6.0 models

เนื่องจากแอปจะต้องแยกเนื้อหาของบทความออกจากหน้าเว็บโดยอัตโนมัติคุณจึงต้องระบุการอ้างอิงสองอย่างต่อไปนี้ด้วย:

ภาษาประกาศคืออะไร
de.l3s.boilerpipe boilerpipe 1.1.0 net.sourceforge.nekohtml nekohtml 1.9.22

ด้วยการเพิ่มการอ้างอิงเหล่านี้คุณก็พร้อมที่จะก้าวต่อไป

บทความขูดและทำความสะอาด

ส่วนแรกของเครื่องวิเคราะห์ของเราจะเกี่ยวข้องกับการดึงบทความและดึงเนื้อหาจากหน้าเว็บ

เมื่อเรียกค้นบทความจากแหล่งข่าวหน้าเว็บมักจะเต็มไปด้วยข้อมูลที่ไม่เกี่ยวข้อง (วิดีโอที่ฝังลิงก์ขาออกวิดีโอโฆษณา ฯลฯ ) ที่ไม่เกี่ยวข้องกับตัวบทความ นี่คือที่ Boilerpipe เข้ามาเล่น

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

ไลบรารี Boilerpipe มาพร้อมกับการสนับสนุนในตัวสำหรับการขูดหน้าเว็บ สามารถดึง HTML จากเว็บแยกข้อความจาก HTML และล้างข้อความที่แยกออกมา คุณสามารถกำหนดฟังก์ชัน extractFromURL ซึ่งจะใช้ URL และใช้ Boilerpipe เพื่อส่งคืนข้อความที่เกี่ยวข้องมากที่สุดเป็นสตริงโดยใช้ ArticleExtractor สำหรับงานนี้:

import java.net.URL; import de.l3s.boilerpipe.document.TextDocument; import de.l3s.boilerpipe.extractors.CommonExtractors; import de.l3s.boilerpipe.sax.BoilerpipeSAXInput; import de.l3s.boilerpipe.sax.HTMLDocument; import de.l3s.boilerpipe.sax.HTMLFetcher; public class BoilerPipeExtractor { public static String extractFromUrl(String userUrl) throws java.io.IOException, org.xml.sax.SAXException, de.l3s.boilerpipe.BoilerpipeProcessingException { final HTMLDocument htmlDoc = HTMLFetcher.fetch(new URL(userUrl)); final TextDocument doc = new BoilerpipeSAXInput(htmlDoc.toInputSource()).getTextDocument(); return CommonExtractors.ARTICLE_EXTRACTOR.getText(doc); } }

ไลบรารี Boilerpipe มีตัวแยกที่แตกต่างกันตามอัลกอริทึม boilerpipe พร้อมด้วย ArticleExtractor ได้รับการปรับให้เหมาะสมเป็นพิเศษสำหรับบทความข่าวในรูปแบบ HTML ArticleExtractor เน้นเฉพาะแท็ก HTML ที่ใช้ในแต่ละบล็อกเนื้อหาและความหนาแน่นของลิงก์ขาออก สิ่งนี้เหมาะกับงานของเราดีกว่าเร็วกว่า แต่ง่ายกว่า DefaultExtractor

ฟังก์ชั่นในตัวจะดูแลทุกอย่างให้เรา:

  • HTMLFetcher.fetch รับเอกสาร HTML
  • getTextDocument แยกเอกสารข้อความ
  • CommonExtractors.ARTICLE_EXTRACTOR.getText แยกข้อความที่เกี่ยวข้องออกจากบทความโดยใช้อัลกอริทึม boilerpipe

ตอนนี้คุณสามารถทดลองใช้กับบทความตัวอย่างเกี่ยวกับการควบรวมกิจการของยักษ์ใหญ่ด้านออพติคอล Essilor และ Luxottica ซึ่งคุณสามารถค้นหาได้ ที่นี่ . คุณสามารถป้อน URL นี้กับฟังก์ชันและดูว่ามีอะไรออกมาบ้าง

เพิ่มรหัสต่อไปนี้ในฟังก์ชันหลักของคุณ:

public class App { public static void main( String[] args ) throws java.io.IOException, org.xml.sax.SAXException, de.l3s.boilerpipe.BoilerpipeProcessingException { String urlString = 'http://www.reuters.com/article/us-essilor-m-a-luxottica-group-idUSKBN14Z110'; String text = BoilerPipeExtractor.extractFromUrl(urlString); System.out.println(text); } }

คุณควรเห็นในผลลัพธ์ของคุณในเนื้อหาหลักของบทความโดยไม่มีโฆษณาแท็ก HTML และลิงก์ขาออก นี่คือตัวอย่างข้อมูลเริ่มต้นจากสิ่งที่ฉันได้รับเมื่อวิ่งสิ่งนี้:

MILAN/PARIS Italy's Luxottica (LUX.MI) and France's Essilor (ESSI.PA) have agreed a 46 billion euro ( billion) merger to create a global eyewear powerhouse with annual revenue of more than 15 billion euros. The all-share deal is one of Europe's largest cross-border tie-ups and brings together Luxottica, the world's top spectacles maker with brands such as Ray-Ban and Oakley, with leading lens manufacturer Essilor. 'Finally ... two products which are naturally complementary -- namely frames and lenses -- will be designed, manufactured and distributed under the same roof,' Luxottica's 81-year-old founder Leonardo Del Vecchio said in a statement on Monday. Shares in Luxottica were up by 8.6 percent at 53.80 euros by 1405 GMT (9:05 a.m. ET), with Essilor up 12.2 percent at 114.60 euros. The merger between the top players in the 95 billion eyewear market is aimed at helping the businesses to take full advantage of expected strong demand for prescription spectacles and sunglasses due to an aging global population and increasing awareness about eye care. Jefferies analysts estimate that the market is growing at between...

และนั่นคือเนื้อหาหลักของบทความ ยากที่จะจินตนาการว่าสิ่งนี้ทำได้ง่ายกว่ามาก

การติดแท็กส่วนของคำพูด

เมื่อคุณแยกเนื้อหาบทความหลักสำเร็จแล้วคุณสามารถพิจารณาได้ว่าบทความกล่าวถึง บริษัท ที่ผู้ใช้สนใจหรือไม่

วิธีการสร้างกรอบงาน

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

ประการแรกการค้นหาสตริงอาจมีแนวโน้มที่จะเกิดผลบวกปลอม บทความที่กล่าวถึง Microsoft Excel อาจถูกแท็กว่ากล่าวถึง Microsoft เป็นต้น

ประการที่สองขึ้นอยู่กับโครงสร้างของนิพจน์ทั่วไปการค้นหานิพจน์ทั่วไปอาจนำไปสู่เชิงลบที่ผิดพลาด ตัวอย่างเช่นบทความที่มีวลี 'Luxottica รายได้เกินความคาดหมาย' อาจพลาดไปโดยการค้นหานิพจน์ทั่วไปที่ค้นหา 'Luxottica' ที่ล้อมรอบด้วยช่องว่างสีขาว

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

ห้องสมุด CoreNLP ของ Stanford มีคุณสมบัติที่ทรงพลังมากมายและเป็นวิธีแก้ปัญหาทั้งสามข้อนี้

สำหรับเครื่องวิเคราะห์ของเราเราจะใช้ตัวติดแท็ก Parts-of-Speech (POS) โดยเฉพาะอย่างยิ่งเราสามารถใช้ POS tagger เพื่อค้นหาคำนามที่เหมาะสมทั้งหมดในบทความและเปรียบเทียบกับพอร์ตหุ้นที่น่าสนใจของเรา

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

โดยการประมวลผลพอร์ตโฟลิโอของเราล่วงหน้าให้เป็นโครงสร้างข้อมูลที่มี ต้นทุนการสอบถามสมาชิกต่ำ เราสามารถลดเวลาที่ต้องใช้ในการวิเคราะห์บทความได้อย่างมาก

Stanford CoreNLP มีแท็กเกอร์ที่เรียกว่าสะดวกมาก MaxentTagger ที่สามารถให้ POS Tagging ได้ในโค้ดไม่กี่บรรทัด

นี่คือการใช้งานง่ายๆ:

public class PortfolioNewsAnalyzer { private HashSet portfolio; private static final String modelPath = 'edu\stanford\nlp\models\pos-tagger\english-left3words\english-left3words-distsim.tagger'; private MaxentTagger tagger; public PortfolioNewsAnalyzer() { tagger = new MaxentTagger(modelPath); } public String tagPos(String input) { return tagger.tagString(input); }

ฟังก์ชันแท็กเกอร์ tagPos รับสตริงเป็นอินพุตและเอาต์พุตสตริงที่มีคำในสตริงต้นฉบับพร้อมกับส่วนของคำพูดที่เกี่ยวข้อง ในฟังก์ชันหลักของคุณให้สร้างอินสแตนซ์ a PortfolioNewsAnalyzer และป้อนเอาต์พุตของมีดโกนลงในฟังก์ชัน tagger และคุณจะเห็นสิ่งนี้:

วิธีใช้เทมเพลตบูตสแตรป
MILAN/PARIS_NN Italy_NNP 's_POS Luxottica_NNP -LRB-_-LRB- LUX.MI_NNP -RRB-_-RRB- and_CC France_NNP 's_POS Essilor_NNP -LRB-_-LRB- ESSI.PA_NNP -RRB-_-RRB- have_VBP agreed_VBN a_DT 46_CD billion_CD euro_NN -LRB-_-LRB- $_$ 49_CD billion_CD -RRB-_-RRB- merger_NN to_TO create_VB a_DT global_JJ eyewear_NN powerhouse_NN with_IN annual_JJ revenue_NN of_IN more_JJR than_IN 15_CD billion_CD euros_NNS ._. The_DT all-share_JJ deal_NN is_VBZ one_CD of_IN Europe_NNP 's_POS largest_JJS cross-border_JJ tie-ups_NNS and_CC brings_VBZ together_RB Luxottica_NNP ,_, the_DT world_NN 's_POS top_JJ spectacles_NNS maker_NN with_IN brands_NNS such_JJ as_IN Ray-Ban_NNP and_CC Oakley_NNP ,_, with_IN leading_VBG lens_NN manufacturer_NN Essilor_NNP ._. ``_`` Finally_RB ..._: two_CD products_NNS which_WDT are_VBP naturally_RB complementary_JJ --_: namely_RB frames_NNS and_CC lenses_NNS --_: will_MD be_VB designed_VBN ,_, manufactured_VBN and_CC distributed_VBN under_IN the_DT same_JJ roof_NN ,_, ''_'' Luxottica_NNP 's_POS 81-year-old_JJ founder_NN Leonardo_NNP Del_NNP Vecchio_NNP said_VBD in_IN a_DT statement_NN on_IN Monday_NNP ._. Shares_NNS in_IN Luxottica_NNP were_VBD up_RB by_IN 8.6_CD percent_NN at_IN 53.80_CD euros_NNS by_IN 1405_CD GMT_NNP -LRB-_-LRB- 9:05_CD a.m._NN ET_NNP -RRB-_-RRB- ,_, with_IN Essilor_NNP up_IN 12.2_CD percent_NN at_IN 114.60_CD euros_NNS ._. The_DT merger_NN between_IN the_DT top_JJ players_NNS in_IN the_DT 95_CD billion_CD eyewear_NN market_NN is_VBZ aimed_VBN at_IN helping_VBG the_DT businesses_NNS to_TO take_VB full_JJ advantage_NN of_IN expected_VBN strong_JJ demand_NN for_IN prescription_NN spectacles_NNS and_CC sunglasses_NNS due_JJ to_TO an_DT aging_NN global_JJ population_NN and_CC increasing_VBG awareness_NN about_IN...

การประมวลผลเอาต์พุตที่ติดแท็กเป็นชุด

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

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

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

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

ด้านล่างนี้เป็นฟังก์ชันที่ใช้ในการแยกและจัดเก็บคำนามที่เหมาะสม วางฟังก์ชันนี้ใน PortfolioNewsAnalyzer ของคุณ ชั้น:

public static HashSet extractProperNouns(String taggedOutput) { HashSet propNounSet = new HashSet(); String[] split = taggedOutput.split(' '); for (String token: split ){ String[] splitTokens = token.split('_'); if(splitTokesn[1].equals('NNP')){ propNounSet.add(splitTokens[0]); } } return propNounSet; }

มีปัญหากับการใช้งานนี้แม้ว่า หากชื่อ บริษัท ประกอบด้วยคำหลายคำ (เช่น Carl Zeiss ในตัวอย่าง Luxottica) การใช้งานนี้จะไม่สามารถตรวจจับได้ ในตัวอย่างของ Carl Zeiss“ Carl” และ“ Zeiss” จะถูกแทรกลงในชุดแยกกันดังนั้นจะไม่มีสตริงเดี่ยว“ Carl Zeiss”

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

public static HashSet extractProperNouns(String taggedOutput) { HashSet propNounSet = new HashSet(); String[] split = taggedOutput.split(' '); List propNounList = new ArrayList(); for (String token: split ){ String[] splitTokens = token.split('_'); if(splitTokens[1].equals('NNP')){ propNounList.add(splitTokens[0]); } else { if (!propNounList.isEmpty()) { propNounSet.add(StringUtils.join(propNounList, ' ')); propNounList.clear(); } } } if (!propNounList.isEmpty()) { propNounSet.add(StringUtils.join(propNounList, ' ')); propNounList.clear(); } return propNounSet; }

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

[... Monday, Gianluca Semeraro, David Goodman, Delfin, North America, Luxottica, Latin America, Rossi/File Photo, Rome, Safilo Group, SFLG.MI, Friday, Valentina Za, Del Vecchio, CEO Hubert Sagnieres, Oakley, Sagnieres, Jefferies, Ray Ban, ...]

การเปรียบเทียบ Portfolio กับ PropNouns Set

เกือบเสร็จแล้ว!

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

การใช้งานนั้นง่ายมาก เพิ่มรหัสต่อไปนี้ใน PortfolioNewsAnalyzer ของคุณ ชั้น:

ตัวบ่งชี้ประสิทธิภาพหลักของผู้จัดการผลิตภัณฑ์
private HashSet portfolio; public PortfolioNewsAnalyzer() { portfolio = new HashSet(); } public void addPortfolioCompany(String company) { portfolio.add(company); } public boolean arePortfolioCompaniesMentioned(HashSet articleProperNouns){ return !Collections.disjoint(articleProperNouns, portfolio); }

วางมันทั้งหมดเข้าด้วยกัน

ตอนนี้เราสามารถเรียกใช้แอปพลิเคชันทั้งหมดได้แล้ว - การขูดการทำความสะอาดการติดแท็กการรวบรวมและการเปรียบเทียบ นี่คือฟังก์ชันที่ทำงานผ่านแอปพลิเคชันทั้งหมด เพิ่มฟังก์ชันนี้ใน PortfolioNewsAnalyzer ของคุณ ชั้น:

public boolean analyzeArticle(String urlString) throws IOException, SAXException, BoilerpipeProcessingException { String articleText = extractFromUrl(urlString); String tagged = tagPos(articleText); HashSet properNounsSet = extractProperNouns(tagged); return arePortfolioCompaniesMentioned(properNounsSet); }

ในที่สุดเราก็ใช้แอพได้!

นี่คือตัวอย่างโดยใช้บทความเดียวกับข้างต้นและ Luxottica เป็น บริษัท พอร์ตโฟลิโอ:

public static void main( String[] args ) throws IOException, SAXException, BoilerpipeProcessingException { PortfolioNewsAnalyzer analyzer = new PortfolioNewsAnalyzer(); analyzer.addPortfolioCompany('Luxottica'); boolean mentioned = analyzer.analyzeArticle('http://www.reuters.com/article/us-essilor-m-a-luxottica-group-idUSKBN14Z110'); if (mentioned) { System.out.println('Article mentions portfolio companies'); } else { System.out.println('Article does not mention portfolio companies'); } }

เรียกใช้สิ่งนี้และแอปควรพิมพ์ 'บทความกล่าวถึง บริษัท พอร์ตโฟลิโอ'

เปลี่ยน บริษัท พอร์ตโฟลิโอจาก Luxottica เป็น บริษัท ที่ไม่ได้กล่าวถึงในบทความ (เช่น“ Microsoft”) และแอปควรพิมพ์“ บทความไม่กล่าวถึง บริษัท พอร์ตโฟลิโอ”

การสร้างแอป NLP ไม่จำเป็นต้องเป็นเรื่องยาก

ในบทความนี้เราได้ดำเนินการขั้นตอนการสร้างแอปพลิเคชันที่ดาวน์โหลดบทความจาก URL ทำความสะอาดโดยใช้ Boilerpipe ประมวลผลโดยใช้ Stanford NLP และตรวจสอบว่าบทความมีการอ้างอิงที่น่าสนใจหรือไม่ (ในกรณีของเราคือ บริษัท ต่างๆใน แฟ้มสะสมผลงาน). ดังที่แสดงให้เห็นแล้วการใช้ประโยชน์จากเทคโนโลยีที่หลากหลายนี้ทำให้งานที่น่ากลัวกลายเป็นงานที่ค่อนข้างตรงไปตรงมา

ฉันหวังว่าบทความนี้จะแนะนำคุณให้รู้จักกับแนวคิดและเทคนิคที่เป็นประโยชน์ในการประมวลผลภาษาธรรมชาติและเป็นแรงบันดาลใจให้คุณเขียนแอปพลิเคชันภาษาธรรมชาติของคุณเอง

[หมายเหตุ: คุณสามารถค้นหาสำเนาของโค้ดที่อ้างถึงในบทความนี้ ที่นี่ .]

ดู JSON กับ XML อย่างลึกซึ้งตอนที่ 2: จุดแข็งและจุดอ่อนของทั้งสองอย่าง

เทคโนโลยี

ดู JSON กับ XML อย่างลึกซึ้งตอนที่ 2: จุดแข็งและจุดอ่อนของทั้งสองอย่าง
Stork: วิธีสร้างภาษาโปรแกรมใน C ++

Stork: วิธีสร้างภาษาโปรแกรมใน C ++

เทคโนโลยี

โพสต์ยอดนิยม
Nvidia Shield - สิ่งที่แตกต่างบนคอนโซลเกม Android
Nvidia Shield - สิ่งที่แตกต่างบนคอนโซลเกม Android
แผ่นโกงการจัดการโครงการ
แผ่นโกงการจัดการโครงการ
เริ่มต้นใช้งาน Microservices: บทช่วยสอน Dropwizard
เริ่มต้นใช้งาน Microservices: บทช่วยสอน Dropwizard
การแยกการเรียกเก็บเงิน: เรื่องของการเพิ่มประสิทธิภาพ API ภายใน GraphQL
การแยกการเรียกเก็บเงิน: เรื่องของการเพิ่มประสิทธิภาพ API ภายใน GraphQL
กรณีศึกษา: การใช้ ApeeScape เพื่อม้วนปลาใหญ่
กรณีศึกษา: การใช้ ApeeScape เพื่อม้วนปลาใหญ่
 
การประมาณต้นทุนซอฟต์แวร์ในการจัดการโครงการแบบ Agile
การประมาณต้นทุนซอฟต์แวร์ในการจัดการโครงการแบบ Agile
แชทล่ม - เมื่อ Chatbot ล้มเหลว
แชทล่ม - เมื่อ Chatbot ล้มเหลว
ที่ปรึกษาการระดมทุนกับนายหน้า - ตัวแทนจำหน่าย
ที่ปรึกษาการระดมทุนกับนายหน้า - ตัวแทนจำหน่าย
ทำให้ Web Front-end เชื่อถือได้ด้วย Elm
ทำให้ Web Front-end เชื่อถือได้ด้วย Elm
คู่มือสำหรับนักลงทุนเกี่ยวกับน้ำมันปาล์ม
คู่มือสำหรับนักลงทุนเกี่ยวกับน้ำมันปาล์ม
โพสต์ยอดนิยม
  • บัตรเครดิตปลอม ไม่จำกัดเงิน 2017
  • ข้อตกลงรายได้คืออะไร
  • หน้าที่การคลังในธนาคาร
  • โครงสร้างกองทุนส่วนบุคคลทั่วไป
  • node js เว็บแอปพลิเคชันกวดวิชา
  • หลักการเกสตัลต์ของฟิกเกอร์กราวด์
  • ตารางอักขระ utf-8
หมวดหมู่
  • การจัดการวิศวกรรม
  • Kpi และ Analytics
  • เทคโนโลยี
  • ว่องไว
  • © 2022 | สงวนลิขสิทธิ์

    portaldacalheta.pt