스 탠 퍼 드 코어 NLP 기반 감정 분석(텍스트 분석)
스 탠 퍼 드 코어 NLP 는 자바 자연 언어 분석 라 이브 러 리 로 서 품사 적 터미널(POS)레이 블 러,명명 실체 인식(NER),분석 기,대체 분해 시스템,감정 분석 도 구 를 포함 한 모든 자연 언어 처리 도 구 를 통합 하고 영어 로 분 석 된 모델 파일 을 제공한다.
준비 하 다.
기본 적 인 자바 지식 은 최신 자바 개발 키 트(JDK)를 설치 하고 OpenJDK 7 이나 Oracle JDK 7 이 될 수 있 도록 필수 적 이다.
공식 홈 페이지 에서 스 탠 퍼 드 코어 NLP 가방 을 다운로드 하 다.
OpenShift 계 정 을 등록 하면 사용자 당 1.5GB 의 메모리 와 3GB 의 디스크 공간 을 할당 할 수 있 습 니 다.
RHC 클 라 이언 트 도 구 를 설치 하려 면 ruby 1.8.7 또는 업 데 이 트 된 버 전이 필요 합 니 다.ruby gem 이 있 으 면 입력 하 십시오.
sudo gem install rhc
,최신 버 전 으로 확보.RHC 를 업데이트 하려 면 명령 을 실행 하 십시오. sudo gem update rhc
,RHC 명령 행 도 구 를 설치 하 는 데 도움 이 필요 하 시 면 이 페이지 를 참조 하 십시오. https://www.openshift.com/developers/rhc-client-tools-install 통과 하 다.
rhc setup
명령 은 OpenShift 계 정 을 설정 합 니 다.이 명령 은 네 임 스페이스 를 만 들 고 SSH keys 를 OpenShift 서버 에 업로드 하 는 데 도움 을 줍 니 다. Github 창고
오늘 프 리 젠 테 이 션 프로그램의 코드 는 GitHub 에서 찾 을 수 있 습 니 다:day 20-stanford-sentiment-analysis-demo
2 분 안에 SentimentsApp 을 시작 하고 실행 합 니 다.
프로그램 을 만 들 기 시 작 했 습 니 다.이름 은
sentimentsapp
입 니 다.$ rhc create-app sentimentsapp jbosseap --from-code=https://github.com/shekhargulati/day20-stanford-sentiment-analysis-demo.git
다음 명령 도 사용 할 수 있 습 니 다:
$ rhc create-app sentimentsapp jbosseap -g medium --from-code=https://github.com/shekhargulati/day20-stanford-sentiment-analysis-demo.git
이것 은 응용 프로그램 에 용 기 를 만 들 고 필요 한 SELinux 정책 과 cgroup 설정 을 설정 합 니 다.OpenShift 도 개인 git 창 고 를 만 들 고 로 컬 로 복 제 됩 니 다.그리고 로 컬 시스템 으로 버 전 라 이브 러 리 를 복사 합 니 다.마지막 으로 OpenShift 는 외부 에 DNS 를 제공 합 니 다.이 프로그램 은http://newsapp-{domain-name}.rhcloud.com/아래 에 접근 할 수 있 습 니 다(domain-name 을 도 메 인 이름 으로 변경).
이 앱 은 트 위 터 앱 에 대응 하 는 4 개의 환경 변수 가 필요 합 니 다.https://dev.twitter.com/apps/new 새로운 트 위 터 애플 리 케 이 션 을 만 들 고 다음 과 같은 환경 변 수 를 만 듭 니 다.
$ rhc env set TWITTER_OAUTH_ACCESS_TOKEN=<please enter value> -a sentimentsapp
$ rhc env set TWITTER_OAUTH_ACCESS_TOKEN_SECRET=<please enter value> -a sentimentsapp
$rhc env set TWITTER_OAUTH_CONSUMER_KEY=<please enter value> -a sentimentsapp
$rhc env set TWITTER_OAUTH_CONSUMER_SECRET=<please enter value> -a sentimentsapp
서버 가 환경 변 수 를 읽 을 수 있 도록 프로그램 을 다시 시작 합 니 다.
$ rhc restart-app --app sentimentsapp
pom.xml
에서 stanford-corenlp
과 twitter4j
으로 Maven 의 의존 관 계 를 증가 시 키 고 3.3.0 버 전의 스 탠 퍼 드 corenlp 를 감정 분석의 API 로 사용 하기 시작 했다.<dependency>
<groupId>edu.stanford.nlp</groupId>
<artifactId>stanford-corenlp</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.twitter4j</groupId>
<artifactId>twitter4j-core</artifactId>
<version>[3.0,)</version>
</dependency>
이 트 위 터 4j 의존 관 계 는 트 위 터 검색 이 필요 하 다.
업데이트
pom.xml
파일 의 몇 가지 기능 은 Maven 프로젝트 를 자바 7 로 업데이트 합 니 다.<maven.compiler.source>1.7</maven.compiler.source>
<maven.compiler.target>1.7</maven.compiler.target>
이제 Maven 프로젝트 를 업데이트 할 수 있 습 니 다.
CDI 사용 하기
CDI 를 사용 하여 의존 주입 을 진행 합 니 다.CDI,컨 텍스트,의존 주입 은 자바 EE 6 규범 으로 자바 EE 6 프로젝트 에 의존 할 수 있 습 니 다.
...에 있다
src/main/webapp/WEB-INF
폴 더 아래 에 beans.xml
이라는 새 XML 파일 을 만 들 고 CDI 를 시작 합 니 다.<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>
트 위 터 키워드 검색
트 위 터 키 워드 를 검색 하기 위해 트 위 터 4J API 를 사용 하 는 새로운 클래스
TwitterSearch
을 만 들 었 습 니 다.이 API 에 필요 한 트 위 터 프로그램 설정 매개 변 수 는 하 드 인 코딩 이 아 닌 환경 변 수 를 사용 합 니 다.import java.util.Collections;
import java.util.List;
import twitter4j.Query;
import twitter4j.QueryResult;
import twitter4j.Status;
import twitter4j.Twitter;
import twitter4j.TwitterException;
import twitter4j.TwitterFactory;
import twitter4j.conf.ConfigurationBuilder;
public class TwitterSearch {
public List<Status> search(String keyword) {
ConfigurationBuilder cb = new ConfigurationBuilder();
cb.setDebugEnabled(true).setOAuthConsumerKey(System.getenv("TWITTER_OAUTH_CONSUMER_KEY"))
.setOAuthConsumerSecret(System.getenv("TWITTER_OAUTH_CONSUMER_SECRET"))
.setOAuthAccessToken(System.getenv("TWITTER_OAUTH_ACCESS_TOKEN"))
.setOAuthAccessTokenSecret(System.getenv("TWITTER_OAUTH_ACCESS_TOKEN_SECRET"));
TwitterFactory tf = new TwitterFactory(cb.build());
Twitter twitter = tf.getInstance();
Query query = new Query(keyword + " -filter:retweets -filter:links -filter:replies -filter:images");
query.setCount(20);
query.setLocale("en");
query.setLang("en");;
try {
QueryResult queryResult = twitter.search(query);
return queryResult.getTweets();
} catch (TwitterException e) {
// ignore
e.printStackTrace();
}
return Collections.emptyList();
}
}
위 코드 에 서 는 트 위 터 검색 결 과 를 선별 해 트 위 터(retweet)나 링크 가 있 는 트 위 터,사진 이 있 는 트 위 터 를 확보 했다.이 는 우리 가 문자 가 있 는 트 위 터 를 얻 었 는 지 확인 하기 위해 서다.
감정 분석 기(SentimentAnalyzer)
SentimentAnalyzer
이라는 종 류 를 만 들 었 는데 이런 종 류 는 특정한 트 윗 에 대해 감정 분석 을 한 것 이다.public class SentimentAnalyzer {
public TweetWithSentiment findSentiment(String line) {
Properties props = new Properties();
props.setProperty("annotators", "tokenize, ssplit, parse, sentiment");
StanfordCoreNLP pipeline = new StanfordCoreNLP(props);
int mainSentiment = 0;
if (line != null && line.length() > 0) {
int longest = 0;
Annotation annotation = pipeline.process(line);
for (CoreMap sentence : annotation.get(CoreAnnotations.SentencesAnnotation.class)) {
Tree tree = sentence.get(SentimentCoreAnnotations.AnnotatedTree.class);
int sentiment = RNNCoreAnnotations.getPredictedClass(tree);
String partText = sentence.toString();
if (partText.length() > longest) {
mainSentiment = sentiment;
longest = partText.length();
}
}
}
if (mainSentiment == 2 || mainSentiment > 4 || mainSentiment < 0) {
return null;
}
TweetWithSentiment tweetWithSentiment = new TweetWithSentiment(line, toCss(mainSentiment));
return tweetWithSentiment;
}
}
복제 하 다.
englishPCFG.ser.gz
화해시키다 sentiment.ser.gz
모형 부터 src/main/resources/edu/stanford/nlp/models/lexparser
까지 src/main/resources/edu/stanford/nlp/models/sentiment
폴 더 아래.SentimentsResource 만 들 기
마지막 으로 JAX-RS 자원 류 를 만 들 었 습 니 다.
public class SentimentsResource {
@Inject
private SentimentAnalyzer sentimentAnalyzer;
@Inject
private TwitterSearch twitterSearch;
@GET
@Produces(value = MediaType.APPLICATION_JSON)
public List<Result> sentiments(@QueryParam("searchKeywords") String searchKeywords) {
List<Result> results = new ArrayList<>();
if (searchKeywords == null || searchKeywords.length() == 0) {
return results;
}
Set<String> keywords = new HashSet<>();
for (String keyword : searchKeywords.split(",")) {
keywords.add(keyword.trim().toLowerCase());
}
if (keywords.size() > 3) {
keywords = new HashSet<>(new ArrayList<>(keywords).subList(0, 3));
}
for (String keyword : keywords) {
List<Status> statuses = twitterSearch.search(keyword);
System.out.println("Found statuses ... " + statuses.size());
List<TweetWithSentiment> sentiments = new ArrayList<>();
for (Status status : statuses) {
TweetWithSentiment tweetWithSentiment = sentimentAnalyzer.findSentiment(status.getText());
if (tweetWithSentiment != null) {
sentiments.add(tweetWithSentiment);
}
}
Result result = new Result(keyword, sentiments);
results.add(result);
}
return results;
}
}
상기 코드 는 다음 작업 을 수행 합 니 다.
검색 키워드(searchkeywords)가'무효 가 아니 라 비어 있 지 않 습 니 다'인지 확인 한 다음 한 배열 로 나 누 어 세 개의 검색 조건 만 고려 합 니 다.
그리고 모든 검색 조건 에 해당 하 는 트 윗 을 찾 아 감정 분석 을 한다.
마지막 으로 결과 목록 을 사용자 에 게 되 돌려 줍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
MySQL에서 머신러닝용 경마 데이터 준비하지만 자유형 구축의 논리에도 시간이 걸리고 자유형 자체에도 시간이 걸리는 점 등을 고려해 이번에는 중앙경마를 주최하는 JRA가 제공하는 JRA-VAN 데이터 실험실의 무료 체험판에 첨부된 DVD 데이터로 MySQL...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.