portaldacalheta.pt
  • Principal
  • Procédé De Design
  • Interface Web
  • Hausse Des Revenus
  • Processus Financiers
La Technologie

Comment créer une application de traitement du langage naturel



Le traitement du langage naturel - une technologie qui permet aux applications logicielles de traiter le langage humain - est devenu assez omniprésent au cours des dernières années.

La recherche Google est de plus en plus capable de répondre à des questions qui semblent naturelles, Siri d'Apple est capable de comprendre une grande variété de questions, et de plus en plus d'entreprises utilisent (raisonnablement) des robots de chat et de téléphone intelligents pour communiquer avec leurs clients. Mais comment fonctionne vraiment ce logiciel apparemment «intelligent»?





Dans cet article, vous découvrirez la technologie qui fait fonctionner ces applications et vous apprendrez à développer votre propre logiciel de traitement du langage naturel.



L'article vous guidera à travers l'exemple de processus de création d'un analyseur de pertinence des actualités. Imaginons que vous ayez un portefeuille d'actions et que vous souhaitiez qu'une application explore automatiquement les sites Web d'actualités populaires et identifie les articles pertinents pour votre portefeuille. Par exemple, si votre portefeuille d'actions comprend des sociétés telles que Microsoft, BlackStone et Luxottica, vous voudrez voir des articles qui mentionnent ces trois sociétés.

Premiers pas avec la bibliothèque PNL de Stanford

Les applications de traitement du langage naturel, comme toutes les autres applications d'apprentissage automatique, reposent sur un certain nombre d'algorithmes relativement petits, simples et intuitifs fonctionnant en tandem. Il est souvent judicieux d'utiliser une bibliothèque externe où tous ces algorithmes sont déjà implémentés et intégrés.



Pour notre exemple, nous utiliserons le Bibliothèque PNL de Stanford , une puissante bibliothèque de traitement du langage naturel basée sur Java qui prend en charge de nombreux langages.

Un algorithme particulier de cette bibliothèque qui nous intéresse est le tagger de partie de parole (POS). Un tagueur de point de vente est utilisé pour attribuer automatiquement des parties de discours à chaque mot d'un morceau de texte. Cet étiqueteur de point de vente classe les mots dans le texte en fonction des caractéristiques lexicales et les analyse par rapport aux autres mots qui les entourent.



La mécanique exacte de l'algorithme de marquage POS dépasse le cadre de cet article, mais vous pouvez en savoir plus Ici .

Pour commencer, nous allons créer un nouveau projet Java (vous pouvez utiliser votre IDE préféré) et ajouter la bibliothèque Stanford NLP à la liste des dépendances. Si vous utilisez Maven, ajoutez-le simplement à votre pom.xml fichier:

comment faire en sorte qu'un bot discord ne publie que sur un canal
edu.stanford.nlp stanford-corenlp 3.6.0 edu.stanford.nlp stanford-corenlp 3.6.0 models

Étant donné que l'application devra extraire automatiquement le contenu d'un article d'une page Web, vous devrez également spécifier les deux dépendances suivantes:

de.l3s.boilerpipe boilerpipe 1.1.0 net.sourceforge.nekohtml nekohtml 1.9.22

Avec ces dépendances ajoutées, vous êtes prêt à aller de l'avant.

Articles de grattage et de nettoyage

La première partie de notre analyseur consistera à récupérer des articles et à extraire leur contenu des pages Web.

Lors de la récupération d'articles à partir de sources d'actualités, les pages sont généralement criblées d'informations superflues (vidéos intégrées, liens sortants, vidéos, publicités, etc.) qui ne sont pas pertinentes pour l'article lui-même. C'est ici que Chaudière entre en jeu.

Boilerpipe est un algorithme extrêmement robuste et efficace pour supprimer le «fouillis» qui identifie le contenu principal d'un article de presse en analysant différents blocs de contenu à l'aide de fonctionnalités telles que la longueur d'une phrase moyenne, les types de balises utilisées dans les blocs de contenu et la densité des liens. L'algorithme passe-partout s'est avéré compétitif avec d'autres algorithmes beaucoup plus coûteux en calcul, tels que ceux basés sur la vision industrielle. Vous pouvez en savoir plus sur son site du projet .

La bibliothèque Boilerpipe est fournie avec une prise en charge intégrée pour le scraping de pages Web. Il peut récupérer le HTML sur le Web, extraire du texte du HTML et nettoyer le texte extrait. Vous pouvez définir une fonction, extractFromURL, qui prendra une URL et utilisera Boilerpipe pour renvoyer le texte le plus pertinent sous forme de chaîne en utilisant ArticleExtractor pour cette tâche:

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

La bibliothèque Boilerpipe fournit différents extracteurs basés sur l'algorithme de la chaudière, avec ArticleExtractor étant spécifiquement optimisé pour les articles de presse au format HTML. ArticleExtractor se concentre spécifiquement sur les balises HTML utilisées dans chaque bloc de contenu et la densité des liens sortants. C'est mieux adapté à notre tâche que le plus rapide mais plus simple DefaultExtractor.

Les fonctions intégrées s'occupent de tout pour nous:

  • HTMLFetcher.fetch récupère le document HTML
  • getTextDocument extrait le document texte
  • CommonExtractors.ARTICLE_EXTRACTOR.getText extrait le texte pertinent de l'article à l'aide de l'algorithme de la chaudière

Maintenant, vous pouvez l'essayer avec un exemple d'article concernant les fusions des géants de l'optique Essilor et Luxottica, que vous pouvez trouver Ici . Vous pouvez alimenter cette URL à la fonction et voir ce qui sort.

Ajoutez le code suivant à votre fonction principale:

comment lever des capitaux pour une startup
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); } }

Vous devriez voir dans votre sortie dans le corps principal de l'article, sans les annonces, les balises HTML et les liens sortants. Voici le début de ce que j'ai obtenu lorsque j'ai exécuté ceci:

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

Et c'est en effet le corps de l'article principal de l'article. Difficile d'imaginer que cela soit beaucoup plus simple à mettre en œuvre.

Marquer des parties du discours

Maintenant que vous avez extrait avec succès le corps de l'article principal, vous pouvez déterminer si l'article mentionne des entreprises qui intéressent l'utilisateur.

Vous pourriez être tenté de faire simplement une recherche de chaîne ou d'expression régulière, mais cette approche présente plusieurs inconvénients.

Tout d'abord, une recherche de chaîne peut être sujette à de faux positifs. Un article qui mentionne Microsoft Excel peut être étiqueté comme mentionnant Microsoft, par exemple.

Deuxièmement, selon la construction de l'expression régulière, une recherche d'expression régulière peut conduire à de faux négatifs. Par exemple, un article contenant la phrase 'Les bénéfices trimestriels de Luxottica ont dépassé les attentes' risque de passer à côté d'une recherche par expression régulière qui recherche 'Luxottica' entouré d'espaces blancs.

apprendre la programmation c en ligne gratuitement

Enfin, si vous êtes intéressé par un grand nombre d’entreprises et que vous traitez un grand nombre d’articles, la recherche dans tout le corps du texte de chaque entreprise du portefeuille de l’utilisateur peut prendre beaucoup de temps et générer des performances inacceptables.

Bibliothèque CoreNLP de Stanford possède de nombreuses fonctionnalités puissantes et fournit un moyen de résoudre ces trois problèmes.

Pour notre analyseur, nous utiliserons le tagger Parts-of-Speech (POS). En particulier, nous pouvons utiliser le tagger POS pour trouver tous les noms propres dans l'article et les comparer à notre portefeuille d'actions intéressantes.

En incorporant la technologie PNL, nous améliorons non seulement la précision de notre marqueur et minimisons les faux positifs et négatifs mentionnés ci-dessus, mais nous minimisons également considérablement la quantité de texte que nous devons comparer à notre portefeuille d'actions, car les noms propres ne comprennent qu'un petit sous-ensemble. du texte intégral de l'article.

En pré-traitant notre portefeuille dans une structure de données qui a faible coût de requête d'adhésion , nous pouvons réduire considérablement le temps nécessaire pour analyser un article.

Stanford CoreNLP fournit un tagger très pratique appelé MaxentTagger qui peut fournir le marquage POS en quelques lignes de code.

Voici une implémentation simple:

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

La fonction de balisage, tagPos, prend une chaîne comme entrée et génère une chaîne qui contient les mots de la chaîne d'origine avec la partie correspondante du discours. Dans votre fonction principale, instanciez un PortfolioNewsAnalyzer et alimentez la sortie du grattoir dans la fonction tagger et vous devriez voir quelque chose comme ceci:

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

Traitement de la sortie étiquetée dans un ensemble

Jusqu'à présent, nous avons créé des fonctions pour télécharger, nettoyer et baliser un article d'actualité. Mais nous devons encore déterminer si l'article mentionne l'une des entreprises d'intérêt pour l'utilisateur.

Pour ce faire, nous devons collecter tous les noms propres et vérifier si les actions de notre portefeuille sont incluses dans ces noms propres.

Pour trouver tous les noms appropriés, nous voudrons d'abord diviser la sortie de la chaîne balisée en jetons (en utilisant des espaces comme délimiteurs), puis diviser chacun des jetons sur le trait de soulignement (_) et vérifier si la partie du discours est un nom propre.

Une fois que nous aurons tous les noms appropriés, nous voudrons les stocker dans une structure de données mieux optimisée pour notre objectif. Pour notre exemple, nous utiliserons un HashSet. En échange de l'interdiction des entrées en double et du non-suivi de l'ordre des entrées, HashSet permet des requêtes d'adhésion très rapides. Puisque nous ne sommes intéressés que par la demande d'adhésion, le HashSet est parfait pour nos besoins.

Vous trouverez ci-dessous la fonction qui implémente le fractionnement et le stockage des noms propres. Placez cette fonction dans votre PortfolioNewsAnalyzer classe:

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

Il y a cependant un problème avec cette implémentation. Si le nom d'une entreprise se compose de plusieurs mots (par exemple, Carl Zeiss dans l'exemple Luxottica), cette implémentation ne pourra pas l'attraper. Dans l'exemple de Carl Zeiss, «Carl» et «Zeiss» seront insérés séparément dans l'ensemble et ne contiendront donc jamais la seule chaîne «Carl Zeiss».

analyse de données twitter en utilisant python

Pour résoudre ce problème, nous pouvons collecter tous les consécutif noms propres et joignez-les avec des espaces. Voici l'implémentation mise à jour qui accomplit ceci:

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

Maintenant, la fonction doit renvoyer un ensemble avec les noms propres individuels et les noms propres consécutifs (c'est-à-dire joints par des espaces). Si vous imprimez le propNounSet, vous devriez voir quelque chose comme ce qui suit:

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

Comparaison du portefeuille avec l'ensemble des PropNouns

Nous avons presque fini!

Dans les sections précédentes, nous avons construit un grattoir qui peut télécharger et extraire le corps d'un article, un tagueur qui peut analyser le corps de l'article et identifier les noms appropriés, et un processeur qui prend la sortie étiquetée et collecte les noms appropriés dans un HashSet. Il ne reste plus qu'à prendre le HashSet et comparez-la avec la liste des entreprises qui nous intéressent.

en-tête c++ et fichiers source

La mise en œuvre est très simple. Ajoutez le code suivant dans votre PortfolioNewsAnalyzer classe:

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

Mettre tous ensemble

Désormais, nous pouvons exécuter l'ensemble de l'application: le grattage, le nettoyage, le marquage, la collecte et la comparaison. Voici la fonction qui traverse toute l'application. Ajoutez cette fonction à votre PortfolioNewsAnalyzer classe:

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

Enfin, nous pouvons utiliser l'application!

Voici un exemple utilisant le même article que ci-dessus et Luxottica comme société de portefeuille:

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'); } }

Exécutez ceci, et l'application doit imprimer «L'article mentionne les sociétés du portefeuille».

Remplacez la société de portefeuille Luxottica par une société non mentionnée dans l'article (telle que «Microsoft»), et l'application doit imprimer «L'article ne mentionne pas les sociétés du portefeuille».

Créer une application PNL n'a pas besoin d'être difficile

Dans cet article, nous avons parcouru le processus de création d'une application qui télécharge un article à partir d'une URL, le nettoie à l'aide de Boilerpipe, le traite à l'aide de Stanford NLP et vérifie si l'article fait des références spécifiques d'intérêt (dans notre cas, les entreprises de notre portefeuille). Comme démontré, tirer parti de cet éventail de technologies transforme ce qui serait autrement une tâche ardue en une tâche relativement simple.

J'espère que cet article vous a présenté des concepts et des techniques utiles dans le traitement du langage naturel et qu'il vous a inspiré pour écrire vos propres applications en langage naturel.

[Remarque: vous pouvez trouver une copie du code référencé dans cet article Ici .]

Explorer les fonds Evergreen avec un investisseur en CR qui en a levé un

Processus Financiers

Explorer les fonds Evergreen avec un investisseur en CR qui en a levé un
Accessibilité Web: pourquoi les normes du W3C sont souvent ignorées

Accessibilité Web: pourquoi les normes du W3C sont souvent ignorées

Science Des Données Et Bases De Données

Articles Populaires
Comment créer une culture dans des équipes distantes
Comment créer une culture dans des équipes distantes
Guide du développeur sur les licences Open Source
Guide du développeur sur les licences Open Source
Comment organiser une conférence technique réussie: l'événement CordobaJS
Comment organiser une conférence technique réussie: l'événement CordobaJS
Astuces et astuces avancées pour les présentations PowerPoint
Astuces et astuces avancées pour les présentations PowerPoint
Un didacticiel pour les futurs développeurs Google Glass: créer votre première application Glass
Un didacticiel pour les futurs développeurs Google Glass: créer votre première application Glass
 
Vol d'identité des pigistes: ça m'est arrivé - voici ce que vous devez savoir
Vol d'identité des pigistes: ça m'est arrivé - voici ce que vous devez savoir
Les 9 erreurs les plus courantes commises par les développeurs ioniques
Les 9 erreurs les plus courantes commises par les développeurs ioniques
Ray Dalio de Bridgewater: pionnier silencieux du Big Data, du Machine Learning et de la Fintech
Ray Dalio de Bridgewater: pionnier silencieux du Big Data, du Machine Learning et de la Fintech
Le guide ultime pour créer un plugin WordPress
Le guide ultime pour créer un plugin WordPress
Reconnaissance des numéros d'apprentissage automatique - De zéro à l'application
Reconnaissance des numéros d'apprentissage automatique - De zéro à l'application
Articles Populaires
  • exemple simple d'apprentissage automatique
  • qu'est-ce que la llc s corp
  • le retour sur investissement mesure de la performance
  • loi gestalt de bonne continuation
  • principe et éléments de conception
  • exemples de la vie réelle de similarité gestalt
  • aide-mémoire css avec des exemples
Catégories
  • Procédé De Design
  • Interface Web
  • Hausse Des Revenus
  • Processus Financiers
  • © 2022 | Tous Les Droits Sont Réservés

    portaldacalheta.pt