ob欧宝最新地址-如果你想探索 C 语言的几个特点
你的位置:ob欧宝最新地址 > ob欧宝最新地址 > 如果你想探索 C 语言的几个特点
如果你想探索 C 语言的几个特点
发布日期:2022-02-20 13:47    点击次数:101

如果你想探索 C 语言的几个特点

积极的? 恼恨的? 中性的? 使用斯坦福 CoreNLP 组件以及几行代码便可对句子进行分析。

本文先容若何使用集成到斯坦福 CoreNLP(一个用于当然话语处置的开源库)中的情感器具在 Java 中齐全此类任务。

我精通几种编程语言,但我最喜欢的是 C 语言。C 语言开发于 20 世纪 70 年代,作为一种系统编程语言,在 2021 年仍然是最受欢迎的编程语言之一。如果你想探索 C 语言的几个特点,可以从去年的这些热门文章开始:

 ob欧宝最新地址,欧宝娱乐网页版入口几个月前,我在《4个实验,彻底搞懂TCP连接的断开》这篇文章中给自己挖了个坑:

斯坦福 CoreNLP 情感分类器

要实施情感分析,您需要一个情感分类器,这是一种不错笔据从检修数据聚集学习的瞻望来识别情感信息的器具。

ob欧宝最新地址,欧宝娱乐网页版入口平台客服QQ:865083652

在斯坦福 CoreNLP 中,情感分类器开荒在递归神经汇集 (RNN) 深度学习模子之上,该模子在斯坦福情感树库 (SST) 上进行检修。

SST 数据集是一个带多情感标签的语料库,从数千个使用的句子中推导出每个句法上可能的短语,从而允许拿获文本中情感的组成后果。简便来说,这允许模子笔据单词若何组成短语的含义来识别情感,而不单是是通过孤单时评估单词。

为了更好地了解 SST 数据集的结构,您可从斯坦福 CoreNLP 情感分析页面下载数据集文献。

在 Java 代码中,Stanford CoreNLP 情感分类器使用如下。

领先,您通过添加实施情感分析所需的谛视器(举例象征化、拆分、理解和情感)来构建文本处置管道。 就斯坦福 CoreNLP 而言,谛视器是一个对谛视对象进行操作的接口,其中后者默示文档中的一段文本。 举例,需要使用 ssplit 谛视器将象征序列拆分为句子。

斯坦福 CoreNLP 以每个句子为基础联想情感。 因此,将文天职割成句子的经过耐久罢黜愚弄情感谛视器。

一朝文本被分红句子,理解谛视器就会实施句法依赖理解,为每个句子生成一个依赖默示。 然后,情感谛视器处置这些依赖默示,将它们与底层模子进行相比,以构建带有每个句子的情感标签(谛视)的二值化树。

简便来说,树的节点由输入句子的象征战胜,并包含谛视,率领从句子导出的扫数短语的从相等恼恨到相等积极的五个情感类别中的瞻望类别。 基于这些瞻望,情感谛视器联想扫数这个词句子的情感。

竖立斯坦福 CoreNLP

在脱手使用斯坦福 CoreNLP 之前,您需要进行以下竖立:

要运行斯坦福 CoreNLP,您需要 Java 1.8 或更高版块。

下载 Stanford CoreNLP 包并将该包解压缩到您机器上的腹地文献夹中。

下载地址:

https://nlp.stanford.edu/software/stanford-corenlp-latest.zip

本文以将上述代码解压到如下目次为例:

c:/softwareInstall/corenlp/stanford-corenlp-4.3.2

完成上述设施后,您就不错创建运行斯坦福 CoreNLP 管道来处置文本的 Java 圭表了。

领先新建一个maven样式,并手动将stanford-corenlp-4.3.2添加到Libraries中:

 

使用深度学习模子在 Java 中实施文本情感分析

 

在以下示例中,您将齐全一个简便的 Java 圭表,该圭表运行斯坦福 CoreNLP 管道,以对包含多个句子的文本进行情感分析。

领先,齐全一个NlpPipeline类,该类提供驱动化管道的步息争使用此管道将提交的文本拆分为句子然后对每个句子的情感进行分类的步调。 底下是NlpPipeline类代码:

 

package com.zh.ch.corenlp;  import edu.stanford.nlp.ling.CoreAnnotations; import edu.stanford.nlp.neural.rnn.RNNCoreAnnotations; import edu.stanford.nlp.pipeline.Annotation; import edu.stanford.nlp.pipeline.StanfordCoreNLP; import edu.stanford.nlp.sentiment.SentimentCoreAnnotations; import edu.stanford.nlp.trees.Tree; import edu.stanford.nlp.util.CoreMap;  import java.util.Properties;  public class NlpPipeline {     StanfordCoreNLP pipeline = null;     public  void init()     {         Properties props = new Properties();         props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");         pipeline = new StanfordCoreNLP(props);     }     public void estimatingSentiment(String text)     {         int sentimentInt;         String sentimentName;         Annotation annotation = pipeline.process(text);         for(CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class))         {             Tree tree = sentence.get(SentimentCoreAnnotations.SentimentAnnotatedTree.class);             sentimentInt = RNNCoreAnnotations.getPredictedClass(tree);             sentimentName = sentence.get(SentimentCoreAnnotations.SentimentClass.class);             System.out.println(sentimentName + "\t" + sentimentInt + "\t" + sentence);         }     } } 

 

init() 步调驱动化StanfordCoreNLP 管道,它还驱动化使用该情感器具所需的分词器、依赖理解器和句子拆分器。 要驱动化管道,请将带有相应谛视器列表的 Properties 对象传递给 StanfordCoreNLP() 构造函数。 这将创建一个定制的管道,准备好对文本实施情感分析。

在NlpPipeline类的estimatingSentiment()步调中,调用之前创建的管道对象的process()步调,传入文本进行处置。 process() 步调复返一个谛视对象,该对象存储对提交的文本的分析。

接下来,迭代谛视对象,在每次迭代中获取一个句子级 CoreMap 对象。关于这些对象中的每一个,获取一个包含用于战胜底层句子情感的情感谛视的 Tree 对象。

将 Tree 对象传递给 RNNCoreAnnotations 类的 getPredictedClass() 步调,以索要对应句子的瞻望情感的编号代码。然后,获取瞻望情感的称号并打印罢休。

要测试上述功能,请使用调用 init() 步调的 main() 步调齐全一个类,然后调用 nlpPipeline 类的 estimatingSentiment() 步调,将示例文本传递给后者。

在以下齐全中,为了简便起见,径直指定text文本。示例句子旨在涵盖斯坦福 CoreNLP 可用的扫数这个词情感评分范围:相等积极、积极、中立、恼恨和相等恼恨。

 

package com.zh.ch.corenlp;  import java.io.FileReader; import java.io.IOException;  public class Main {          static NlpPipeline nlpPipeline = null;      public static void processText(String text) {         nlpPipeline.estimatingSentiment(text);     }      public static void main(String[] args) {         String text = "This is an excellent book. I enjoy reading it. I can read on Sundays. Today is only Tuesday. Can't wait for next Sunday. The working week is unbearably long. It's awful.";         nlpPipeline  = new NlpPipeline();         nlpPipeline.init();         processText(text);     }  } 

 

实施罢休:

 

使用深度学习模子在 Java 中实施文本情感分析

 

分析在线客户指摘

正如您从前边的示例中了解到的,Stanford CoreNLP 不错复返句子的情感。 相干词,有很多用例需要分析多段文本的情感,每段文本可能包含不啻一个句子。 举例,您可能想要分析来自电子商务网站的推文或客户指摘的情感。

要使用斯坦福 CoreNLP 联想多句文本样本的情感,您可能会使用几种不同的时刻。

在处置推文时,您可能会分析推文中每个句子的情感,要是有一些正面或负面的句子,您不错分散对扫数这个词推文进行名次,忽略带有中脾性感的句子。 要是推文中的扫数(或真的扫数)句子都是中性的,则该推文不错被列为中性。

相干词,无意您以致无谓分析每个句子来斟酌扫数这个词文本的情感。 举例,在分析客户指摘时,您不错依赖他们的标题,标题相似由一个句子组成。

要完成以下示例,您需要一组客户指摘。 您不错使用本文随附的 NlpBookReviews.csv 文献中的指摘。 该文献包含在 Amazon Review Export 的匡助下从 Amazon 网页下载的一组本色指摘,这是一个 Google Chrome 浏览器彭胀圭表,允许您将居品指摘偏执标题和评级下载到逗号分隔值 (CSV) 文献中 . (您不错使用该器具探索一组不同的指摘以进行分析。)

将下述代码添加到NlpPipeline中

 

public String findSentiment(String text) {         int sentimentInt = 2;         String sentimentName = "NULL";         if (text != null && text.length() > 0) {             Annotation annotation = pipeline.process(text);             CoreMap sentence = annotation                     .get(CoreAnnotations.SentencesAnnotation.class).get(0);             Tree tree = sentence                     .get(SentimentCoreAnnotations.SentimentAnnotatedTree.class);             sentimentInt = RNNCoreAnnotations.getPredictedClass(tree);             sentimentName = sentence.get(SentimentCoreAnnotations.SentimentClass.class);         }         return sentimentName;     } 

 

您可能会属目到,上头的代码近似于上一节中界说的 estimatingSentiment() 步调中的代码。 唯独的领路区别是此次您莫得迭代输入文本中的句子。 相悖,您只会得到第一句话,因为在大无数情况下,指摘的标题由一个句子组成。

下述代码将从 CSV 文献中读取指摘并将它们传递给新创建的 findSentiment() 进行处置,如下所示:

 

public static void processCsvComment(String csvCommentFilePath) {         try (CSVReader reader = new CSVReaderBuilder(new FileReader(csvCommentFilePath)).withSkipLines(1).build())         {             String[] row;             while ((row = reader.readNext()) != null) {                 System.out.println("Review: " + row[1] + "\t" + " Amazon rating: " + row[4] + "\t" + " Sentiment: " + nlpPipeline.findSentiment(row[1]));             }         }         catch (IOException | CsvValidationException e) {             e.printStackTrace();         }     } 

 

实施罢休:

 

使用深度学习模子在 Java 中实施文本情感分析

 

完满代码:

NlpPipeline.java

 

package com.zh.ch.corenlp;  import edu.stanford.nlp.ling.CoreAnnotations; import edu.stanford.nlp.neural.rnn.RNNCoreAnnotations; import edu.stanford.nlp.pipeline.Annotation; import edu.stanford.nlp.pipeline.StanfordCoreNLP; import edu.stanford.nlp.sentiment.SentimentCoreAnnotations; import edu.stanford.nlp.trees.Tree; import edu.stanford.nlp.util.CoreMap;  import java.util.Properties;  public class NlpPipeline {     StanfordCoreNLP pipeline = null;     public  void init() {         Properties props = new Properties();         props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");         pipeline = new StanfordCoreNLP(props);     }     public void estimatingSentiment(String text) {         int sentimentInt;         String sentimentName;         Annotation annotation = pipeline.process(text);         for(CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class))         {             Tree tree = sentence.get(SentimentCoreAnnotations.SentimentAnnotatedTree.class);             sentimentInt = RNNCoreAnnotations.getPredictedClass(tree);             sentimentName = sentence.get(SentimentCoreAnnotations.SentimentClass.class);             System.out.println(sentimentName + "\t" + sentimentInt + "\t" + sentence);         }     }      public String findSentiment(String text) {         int sentimentInt = 2;         String sentimentName = "NULL";         if (text != null && text.length() > 0) {             Annotation annotation = pipeline.process(text);             CoreMap sentence = annotation                     .get(CoreAnnotations.SentencesAnnotation.class).get(0);             Tree tree = sentence                     .get(SentimentCoreAnnotations.SentimentAnnotatedTree.class);             sentimentInt = RNNCoreAnnotations.getPredictedClass(tree);             sentimentName = sentence.get(SentimentCoreAnnotations.SentimentClass.class);         }         return sentimentName;     } } 

 

Main.java

 

package com.zh.ch.corenlp;  import com.opencsv.CSVReader; import com.opencsv.CSVReaderBuilder; import com.opencsv.exceptions.CsvValidationException;  import java.io.FileReader; import java.io.IOException;  public class Main {     static NlpPipeline nlpPipeline = null;      public static void processCsvComment(String csvCommentFilePath) {         try (CSVReader reader = new CSVReaderBuilder(new FileReader(csvCommentFilePath)).withSkipLines(1).build())         {             String[] row;             while ((row = reader.readNext()) != null) {                 System.out.println("Review: " + row[1] + "\t" + " Amazon rating: " + row[4] + "\t" + " Sentiment: " + nlpPipeline.findSentiment(row[1]));             }         }         catch (IOException | CsvValidationException e) {             e.printStackTrace();         }     }      public static void processText(String text) {         nlpPipeline.estimatingSentiment(text);     }      public static void main(String[] args) {         String text = "This is an excellent book. I enjoy reading it. I can read on Sundays. Today is only Tuesday. Can't wait for next Sunday. The working week is unbearably long. It's awful.";         nlpPipeline  = new NlpPipeline();         nlpPipeline.init(); //        processText(text);         processCsvComment("src/main/resources/NlpBookReviews.csv");     } }