스 탠 퍼 드 코어 NLP 기반 감정 분석(텍스트 분석)

스 탠 퍼 드 코어 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-corenlptwitter4j 으로 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)가'무효 가 아니 라 비어 있 지 않 습 니 다'인지 확인 한 다음 한 배열 로 나 누 어 세 개의 검색 조건 만 고려 합 니 다.
그리고 모든 검색 조건 에 해당 하 는 트 윗 을 찾 아 감정 분석 을 한다.
마지막 으로 결과 목록 을 사용자 에 게 되 돌려 줍 니 다.

좋은 웹페이지 즐겨찾기