portaldacalheta.pt
  • Κύριος
  • Σχεδιασμός Ux
  • Κερδοφορία & Αποδοτικότητα
  • Κύκλος Ζωής Προϊόντος
  • Ευκίνητος
Τεχνολογία

Πώς να δημιουργήσετε μια εφαρμογή επεξεργασίας φυσικής γλώσσας



Η επεξεργασία φυσικής γλώσσας - μια τεχνολογία που επιτρέπει σε εφαρμογές λογισμικού να επεξεργάζονται την ανθρώπινη γλώσσα - έχει γίνει αρκετά πανταχού παρούσα τα τελευταία χρόνια.

Η αναζήτηση Google είναι όλο και περισσότερο ικανή να απαντά σε ερωτήσεις που ακούγονται φυσικά, το Siri της Apple είναι σε θέση να κατανοήσει μια μεγάλη ποικιλία ερωτήσεων και όλο και περισσότερες εταιρείες χρησιμοποιούν (λογικά) έξυπνα bots συνομιλίας και τηλεφώνου για να επικοινωνήσουν με τους πελάτες. Αλλά πώς λειτουργεί αυτό το φαινομενικά «έξυπνο» λογισμικό;





Σε αυτό το άρθρο, θα μάθετε για την τεχνολογία που κάνει αυτές τις εφαρμογές να τσεκάρουν και θα μάθετε πώς να αναπτύσσετε το δικό σας λογισμικό επεξεργασίας φυσικής γλώσσας.



Το άρθρο θα σας καθοδηγήσει στο παράδειγμα της διαδικασίας δημιουργίας ενός αναλυτή σχετικότητας ειδήσεων. Φανταστείτε ότι έχετε χαρτοφυλάκιο μετοχών και θα θέλατε μια εφαρμογή να ανιχνεύει αυτόματα μέσω δημοφιλών ιστότοπων ειδήσεων και να εντοπίζει άρθρα που σχετίζονται με το χαρτοφυλάκιό σας. Για παράδειγμα, εάν το χαρτοφυλάκιο μετοχών σας περιλαμβάνει εταιρείες όπως η Microsoft, η BlackStone και η Luxottica, θα θέλατε να δείτε άρθρα που αναφέρουν αυτές τις τρεις εταιρείες.

Ξεκινώντας με τη βιβλιοθήκη Stanford NLP

Οι εφαρμογές επεξεργασίας φυσικής γλώσσας, όπως και άλλες εφαρμογές μηχανικής εκμάθησης, βασίζονται σε έναν αριθμό σχετικά μικρών, απλών, διαισθητικών αλγορίθμων που λειτουργούν παράλληλα. Είναι συχνά λογικό να χρησιμοποιείται μια εξωτερική βιβλιοθήκη όπου όλοι αυτοί οι αλγόριθμοι έχουν ήδη εφαρμοστεί και ενσωματωθεί.



Για παράδειγμα, θα χρησιμοποιήσουμε το Βιβλιοθήκη Stanford NLP , μια ισχυρή βιβλιοθήκη επεξεργασίας φυσικής γλώσσας που βασίζεται σε Java και συνοδεύεται από υποστήριξη για πολλές γλώσσες.

Ένας συγκεκριμένος αλγόριθμος από αυτήν τη βιβλιοθήκη για τον οποίο μας ενδιαφέρει είναι η ετικέτα part-of-speech (POS). Ένας POS tagger χρησιμοποιείται για την αυτόματη εκχώρηση τμημάτων ομιλίας σε κάθε λέξη σε ένα κομμάτι κειμένου. Αυτό το POS tagger ταξινομεί τις λέξεις σε κείμενο βάσει λεξικών χαρακτηριστικών και τις αναλύει σε σχέση με άλλες λέξεις γύρω τους.



Οι ακριβείς μηχανισμοί του αλγορίθμου POS tagger δεν εμπίπτουν στο πεδίο αυτού του άρθρου, αλλά μπορείτε να μάθετε περισσότερα σχετικά με αυτό εδώ .

Για να ξεκινήσετε, θα δημιουργήσουμε ένα νέο έργο Java (μπορείτε να χρησιμοποιήσετε το αγαπημένο σας IDE) και να προσθέσετε τη βιβλιοθήκη Stanford NLP στη λίστα εξαρτήσεων. Εάν χρησιμοποιείτε το Maven, απλώς προσθέστε το στο pom.xml αρχείο:

γραφείο διαχείρισης έργου (pmo)
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 έχει αποδειχθεί ανταγωνιστικός με άλλους πολύ πιο υπολογιστικά ακριβούς αλγόριθμους, όπως αυτοί που βασίζονται στην όραση της μηχανής. Μπορείτε να μάθετε περισσότερα σε αυτό τοποθεσία έργου .

Υπολογιστής ωριαίας χρέωσης 1099 vs w2

Η βιβλιοθήκη 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 και τους εξερχόμενους συνδέσμους. Εδώ είναι το απόσπασμα έναρξης από αυτό που πήρα όταν το έτρεξα:

[:] σε python
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 του Στάνφορντ έχει πολλά ισχυρά χαρακτηριστικά και παρέχει έναν τρόπο επίλυσης και των τριών αυτών των προβλημάτων.

Για τον αναλυτή μας, θα χρησιμοποιήσουμε την ετικέτα Parts-of-Speech (POS). Συγκεκριμένα, μπορούμε να χρησιμοποιήσουμε το POS tagger για να βρούμε όλα τα κατάλληλα ουσιαστικά στο άρθρο και να τα συγκρίνουμε με το χαρτοφυλάκιό μας με ενδιαφέροντα αποθέματα.

Με την ενσωμάτωση της τεχνολογίας NLP, όχι μόνο βελτιώνουμε την ακρίβεια του tagger μας και ελαχιστοποιούμε τα ψευδή θετικά και αρνητικά που αναφέρθηκαν παραπάνω, αλλά επίσης ελαχιστοποιούμε δραματικά την ποσότητα κειμένου που πρέπει να συγκρίνουμε με το χαρτοφυλάκιο αποθεμάτων μας, καθώς τα σωστά ουσιαστικά περιλαμβάνουν μόνο ένα μικρό υποσύνολο του πλήρους κειμένου του άρθρου.

Με προεπεξεργασία του χαρτοφυλακίου μας σε μια δομή δεδομένων που έχει χαμηλό κόστος ερωτήματος συμμετοχής , μπορούμε να μειώσουμε δραματικά τον χρόνο που απαιτείται για την ανάλυση ενός άρθρου.

Το Stanford CoreNLP παρέχει ένα πολύ βολικό tagger που ονομάζεται 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); }

Η συνάρτηση tagger, tagPos, παίρνει μια συμβολοσειρά ως είσοδο και εξάγει μια συμβολοσειρά που περιέχει τις λέξεις στην αρχική συμβολοσειρά μαζί με το αντίστοιχο μέρος της ομιλίας. Στην κύρια λειτουργία σας, δημιουργήστε ένα PortfolioNewsAnalyzer και τροφοδοτήστε την έξοδο του ξύστρου στη λειτουργία ετικετών και θα πρέπει να δείτε κάτι τέτοιο:

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'.

hack πιστωτικής κάρτας με έγκυρο cvv

Για να λύσουμε αυτό το πρόβλημα, μπορούμε να συλλέξουμε όλα συνεχής κατάλληλα ουσιαστικά και συνδέστε τα με κενά. Εδώ είναι η ενημερωμένη εφαρμογή που το επιτυγχάνει:

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, ...]

Σύγκριση του χαρτοφυλακίου με το σύνολο PropNouns

Έχουμε σχεδόν τελειώσει!

Στις προηγούμενες ενότητες, δημιουργήσαμε μια ξύστρα που μπορεί να κατεβάσει και να εξαγάγει το σώμα ενός άρθρου, ένα tagger που μπορεί να αναλύσει το σώμα του άρθρου και να προσδιορίσει τα κατάλληλα ουσιαστικά και έναν επεξεργαστή που παίρνει την έξοδο με ετικέτα και συλλέγει τα κατάλληλα ουσιαστικά σε ένα 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 και ελέγχει εάν το άρθρο κάνει συγκεκριμένες αναφορές ενδιαφέροντος (στην περίπτωσή μας, εταιρείες στο χαρτοφυλάκιο). Όπως αποδεικνύεται, η αξιοποίηση αυτής της σειράς τεχνολογιών κάνει κάτι που διαφορετικά θα ήταν τρομακτικό έργο σε ένα σχετικά απλό.

Ελπίζω αυτό το άρθρο να σας παρουσιάσει χρήσιμες έννοιες και τεχνικές στην επεξεργασία φυσικής γλώσσας και ότι σας ενέπνευσε να γράψετε δικές σας εφαρμογές φυσικής γλώσσας.

[Σημείωση: Μπορείτε να βρείτε ένα αντίγραφο του κωδικού που αναφέρεται σε αυτό το άρθρο εδώ .]

Αιτία και αποτέλεσμα - Εξερεύνηση της έγχρωμης ψυχολογίας

Εργαλεία Και Σεμινάρια

Αιτία και αποτέλεσμα - Εξερεύνηση της έγχρωμης ψυχολογίας
Χρησιμοποιούνται οι 10 κορυφαίοι σχεδιαστές UX παραδοτέων

Χρησιμοποιούνται οι 10 κορυφαίοι σχεδιαστές UX παραδοτέων

Σχεδιασμός Ux

Δημοφιλείς Αναρτήσεις
Αισθητική και αντίληψη - Τρόπος προσέγγισης εικόνων εμπειρίας χρήστη
Αισθητική και αντίληψη - Τρόπος προσέγγισης εικόνων εμπειρίας χρήστη
Βέλτιστες πρακτικές διάταξης ιστού: Αναλύθηκαν 12 διαχρονικά μοτίβα διεπαφής χρήστη
Βέλτιστες πρακτικές διάταξης ιστού: Αναλύθηκαν 12 διαχρονικά μοτίβα διεπαφής χρήστη
Εξοικείωση με το Πρόγραμμα ανάπτυξης Sketch
Εξοικείωση με το Πρόγραμμα ανάπτυξης Sketch
Mini Tutorial - Ένας οδηγός για συνδυασμούς γραμματοσειρών
Mini Tutorial - Ένας οδηγός για συνδυασμούς γραμματοσειρών
Για Σχεδιαστές με Αγάπη (Ένα Γράμμα από έναν Προγραμματιστή Front-end)
Για Σχεδιαστές με Αγάπη (Ένα Γράμμα από έναν Προγραμματιστή Front-end)
 
Σχεδιασμός βάσει δεδομένων και γενετικός σχεδιασμός - Μια επισκόπηση
Σχεδιασμός βάσει δεδομένων και γενετικός σχεδιασμός - Μια επισκόπηση
Διακομιστές ARM: Κινητή αρχιτεκτονική CPU για κέντρα δεδομένων;
Διακομιστές ARM: Κινητή αρχιτεκτονική CPU για κέντρα δεδομένων;
Ξεκινήστε με μικροσυσκευές: Ένα εκπαιδευτικό πρόγραμμα Dropwizard
Ξεκινήστε με μικροσυσκευές: Ένα εκπαιδευτικό πρόγραμμα Dropwizard
Μείνετε Sharp - Πώς να ενισχύσετε τη δημιουργικότητα όταν υποχωρεί η εργασία
Μείνετε Sharp - Πώς να ενισχύσετε τη δημιουργικότητα όταν υποχωρεί η εργασία
Ditch MVP, Υιοθετήστε Ελάχιστα Βιώσιμα Πρωτότυπα (MVPr)
Ditch MVP, Υιοθετήστε Ελάχιστα Βιώσιμα Πρωτότυπα (MVPr)
Δημοφιλείς Αναρτήσεις
  • πώς να γράψετε τεκμηρίωση λογισμικού
  • Η κατάργηση του γυαλιού steagall προκάλεσε την οικονομική κρίση
  • πώς να δημιουργήσετε μια γλώσσα σεναρίου
  • που κάνει μια εταιρεία κατά το στάδιο της προκαταβολής
  • διαφορά μεταξύ c corp εναντίον s corp
Κατηγορίες
  • Σχεδιασμός Ux
  • Κερδοφορία & Αποδοτικότητα
  • Κύκλος Ζωής Προϊόντος
  • Ευκίνητος
  • © 2022 | Ολα Τα Δικαιώματα Διατηρούνται

    portaldacalheta.pt