Author: tommaso Date: Mon Feb 28 09:46:03 2011 New Revision: 1075256 URL: http://svn.apache.org/viewvc?rev=1075256&view=rev Log: [UIMA-2073] - add sentiment analysis service annotator
Added: uima/sandbox/trunk/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.java (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.java (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.java (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.java (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.java (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.java (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.java (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.java (with props) uima/sandbox/trunk/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.java (with props) Removed: uima/sandbox/trunk/AlchemyAPIAnnotator/marker-file-identifying-standard-pear Modified: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/Alchemy2TypeSystemMapper.java Added: uima/sandbox/trunk/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml Mon Feb 28 09:46:03 2011 @@ -0,0 +1,84 @@ +<?xml version="1.0" encoding="UTF-8"?> +<analysisEngineDescription xmlns="http://uima.apache.org/resourceSpecifier"> + <frameworkImplementation>org.apache.uima.java</frameworkImplementation> + <primitive>true</primitive> + <annotatorImplementationName>org.apache.uima.alchemy.annotator.TextSentimentAnalysisAnnotator</annotatorImplementationName> + <analysisEngineMetaData> + <name>TextSentimentAnalysisAEDescriptor</name> + <description/> + <version>1.0</version> + <vendor/> + <configurationParameters> + <configurationParameter> + <name>apikey</name> + <type>String</type> + <multiValued>false</multiValued> + <mandatory>true</mandatory> + </configurationParameter> + <configurationParameter> + <name>outputMode</name> + <type>String</type> + <multiValued>false</multiValued> + <mandatory>true</mandatory> + </configurationParameter> + <configurationParameter> + <name>url</name> + <type>String</type> + <multiValued>false</multiValued> + <mandatory>false</mandatory> + </configurationParameter> + </configurationParameters> + <configurationParameterSettings> + <nameValuePair> + <name>outputMode</name> + <value> + <string>xml</string> + </value> + </nameValuePair> + <nameValuePair> + <name>apikey</name> + <value> + <string/> + </value> + </nameValuePair> + </configurationParameterSettings> + <typeSystemDescription> + <types> + <typeDescription> + <name>org.apache.uima.alchemy.ts.sentiment.SentimentFS</name> + <description/> + <supertypeName>uima.tcas.Annotation</supertypeName> + <features> + <featureDescription> + <name>sentimentType</name> + <description/> + <rangeTypeName>uima.cas.String</rangeTypeName> + </featureDescription> + <featureDescription> + <name>score</name> + <description/> + <rangeTypeName>uima.cas.String</rangeTypeName> + </featureDescription> + </features> + </typeDescription> + </types> + </typeSystemDescription> + <typePriorities/> + <fsIndexCollection/> + <capabilities> + <capability> + <inputs/> + <outputs> + <type allAnnotatorFeatures="true">org.apache.uima.alchemy.ts.sentiment.SentimentFS</type> + </outputs> + <languagesSupported/> + </capability> + </capabilities> + <operationalProperties> + <modifiesCas>true</modifiesCas> + <multipleDeploymentAllowed>true</multipleDeploymentAllowed> + <outputsNewCASes>false</outputsNewCASes> + </operationalProperties> + </analysisEngineMetaData> + <resourceManagerConfiguration/> +</analysisEngineDescription> Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml ------------------------------------------------------------------------------ svn:keywords = Date Revision Author HeadURL Id Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,52 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.uima.alchemy.annotator; + +import org.apache.uima.alchemy.digester.DigesterProvider; +import org.apache.uima.alchemy.digester.sentiment.SentimentAnalysisDigesterProvider; +import org.apache.uima.jcas.JCas; + +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URL; + +public class TextSentimentAnalysisAnnotator extends AbstractAlchemyAnnotator { + + protected URL createServiceURI() throws MalformedURLException { + return URI.create("http://access.alchemyapi.com/calls/text/TextGetTextSentiment").toURL(); + } + + protected String[] getServiceParameters() { + return new String[] { "outputMode", "url" }; + } + + protected DigesterProvider createDigester() { + return new SentimentAnalysisDigesterProvider(); + } + + protected void initializeRuntimeParameters(JCas aJCas) { + // create parameters string + StringBuffer serviceParamsBuf = new StringBuffer(); + serviceParamsBuf.append("&text="); + String modifiedText = cleanText(aJCas); + serviceParamsBuf.append(modifiedText); + this.serviceParams += (serviceParamsBuf.toString()); + } + +} Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotator.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,44 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.uima.alchemy.digester.domain; + +/** + * The document sentiment information + */ +public class DocumentSentiment { + private String type; + private String score; + + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getScore() { + return score; + } + + public void setScore(String score) { + this.score = score; + } +} Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/DocumentSentiment.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,35 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.uima.alchemy.digester.domain; + +/** + * The result of a sentiment analysis service call + */ +public class SentimentAnalysisResults extends Results { + + private DocumentSentiment docSentiment; + + public DocumentSentiment getDocSentiment() { + return docSentiment; + } + + public void setDocSentiment(DocumentSentiment docSentiment) { + this.docSentiment = docSentiment; + } +} Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/domain/SentimentAnalysisResults.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,39 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.uima.alchemy.digester.sentiment; + +import org.apache.commons.lang.Validate; +import org.apache.uima.alchemy.digester.DigesterProvider; +import org.apache.uima.alchemy.digester.OutputDigester; +import org.apache.uima.alchemy.digester.exception.UnsupportedResultFormatException; + +/** + * Provider for sentiment analysis output parser + */ +public class SentimentAnalysisDigesterProvider implements DigesterProvider { + public OutputDigester getDigester(String type) throws UnsupportedResultFormatException { + Validate.notEmpty(type); + OutputDigester digester = null; + if (type.equals("xml")) { + digester = new XMLSentimentAnalysisDigester(); + } else + throw new UnsupportedResultFormatException(type); + return digester; + } +} Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/SentimentAnalysisDigesterProvider.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,50 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.uima.alchemy.digester.sentiment; + +import org.apache.commons.digester.Digester; +import org.apache.uima.alchemy.digester.OutputDigester; +import org.apache.uima.alchemy.digester.domain.*; +import org.xml.sax.SAXException; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URISyntaxException; + +/** + * Digester for XML output of sentiment analysis service + */ +public class XMLSentimentAnalysisDigester implements OutputDigester { + public Results parseAlchemyXML(InputStream responseStream) throws IOException, SAXException, + URISyntaxException { + Digester digester = new Digester(); + digester.setValidating(false); + + digester.addObjectCreate("results", SentimentAnalysisResults.class); + digester.addBeanPropertySetter("results/status", "status"); + digester.addBeanPropertySetter("results/url", "url"); + digester.addBeanPropertySetter("results/language", "language"); + digester.addObjectCreate("results/docSentiment", DocumentSentiment.class); + digester.addBeanPropertySetter("results/docSentiment/type", "type"); + digester.addBeanPropertySetter("results/docSentiment/score", "score"); + digester.addSetNext("results/docSentiment", "setDocSentiment"); + + return (Results) digester.parse(responseStream); + } +} Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/digester/sentiment/XMLSentimentAnalysisDigester.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/Alchemy2TypeSystemMapper.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/Alchemy2TypeSystemMapper.java?rev=1075256&r1=1075255&r2=1075256&view=diff ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/Alchemy2TypeSystemMapper.java (original) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/Alchemy2TypeSystemMapper.java Mon Feb 28 09:46:03 2011 @@ -29,6 +29,7 @@ import org.apache.uima.alchemy.digester. import org.apache.uima.alchemy.digester.domain.LanguageDetectionResults; import org.apache.uima.alchemy.digester.domain.MicroformatsResults; import org.apache.uima.alchemy.digester.domain.Results; +import org.apache.uima.alchemy.digester.domain.SentimentAnalysisResults; import org.apache.uima.alchemy.mapper.exception.MappingException; import org.apache.uima.alchemy.mapper.processor.AlchemyOutputProcessor; import org.apache.uima.alchemy.mapper.processor.AnnotatedEntitiesProcessor; @@ -38,6 +39,7 @@ import org.apache.uima.alchemy.mapper.pr import org.apache.uima.alchemy.mapper.processor.LanguageProcessor; import org.apache.uima.alchemy.mapper.processor.MicroformatsProcessor; import org.apache.uima.alchemy.mapper.processor.RankedEntitiesProcessor; +import org.apache.uima.alchemy.mapper.processor.SentimentAnalysisProcessor; import org.apache.uima.jcas.JCas; public class Alchemy2TypeSystemMapper { @@ -63,6 +65,7 @@ public class Alchemy2TypeSystemMapper { processors.put(KeywordResults.class, new KeywordProcessor()); processors.put(LanguageDetectionResults.class, new LanguageProcessor()); processors.put(MicroformatsResults.class, new MicroformatsProcessor()); + processors.put(SentimentAnalysisResults.class, new SentimentAnalysisProcessor()); } private static void setLanaguage(Results results, JCas aJCas) { Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,39 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.uima.alchemy.mapper.processor; + +import org.apache.uima.alchemy.digester.domain.DocumentSentiment; +import org.apache.uima.alchemy.digester.domain.Results; +import org.apache.uima.alchemy.digester.domain.SentimentAnalysisResults; +import org.apache.uima.alchemy.ts.sentiment.SentimentFS; +import org.apache.uima.jcas.JCas; + +public class SentimentAnalysisProcessor implements AlchemyOutputProcessor { + + public void process(JCas cas, Results results) throws Exception { + DocumentSentiment docSentiment = ((SentimentAnalysisResults) results).getDocSentiment(); + if (docSentiment != null) { + SentimentFS sentimentFS = new SentimentFS(cas); + sentimentFS.setScore(docSentiment.getScore()); + sentimentFS.setSentimentType(docSentiment.getType()); + sentimentFS.addToIndexes(); + } + } + +} Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/mapper/processor/SentimentAnalysisProcessor.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,98 @@ + + +/* First created by JCasGen Mon Feb 28 10:31:26 CET 2011 */ +package org.apache.uima.alchemy.ts.sentiment; + +import org.apache.uima.jcas.JCas; +import org.apache.uima.jcas.JCasRegistry; +import org.apache.uima.jcas.cas.TOP_Type; + +import org.apache.uima.jcas.tcas.Annotation; + + +/** + * Updated by JCasGen Mon Feb 28 10:31:26 CET 2011 + * XML source: /Users/tommasoteofili/Documents/workspaces/uima_workspace/uima/sandbox/AlchemyAPIAnnotator/desc/TextSentimentAnalysisAEDescriptor.xml + * @generated */ +public class SentimentFS extends Annotation { + /** @generated + * @ordered + */ + public final static int typeIndexID = JCasRegistry.register(SentimentFS.class); + /** @generated + * @ordered + */ + public final static int type = typeIndexID; + /** @generated */ + public int getTypeIndexID() {return typeIndexID;} + + /** Never called. Disable default constructor + * @generated */ + protected SentimentFS() {} + + /** Internal - constructor used by generator + * @generated */ + public SentimentFS(int addr, TOP_Type type) { + super(addr, type); + readObject(); + } + + /** @generated */ + public SentimentFS(JCas jcas) { + super(jcas); + readObject(); + } + + /** @generated */ + public SentimentFS(JCas jcas, int begin, int end) { + super(jcas); + setBegin(begin); + setEnd(end); + readObject(); + } + + /** <!-- begin-user-doc --> + * Write your own initialization here + * <!-- end-user-doc --> + @generated modifiable */ + private void readObject() {} + + + + //*--------------* + //* Feature: sentimentType + + /** getter for sentimentType - gets + * @generated */ + public String getSentimentType() { + if (SentimentFS_Type.featOkTst && ((SentimentFS_Type)jcasType).casFeat_sentimentType == null) + jcasType.jcas.throwFeatMissing("sentimentType", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + return jcasType.ll_cas.ll_getStringValue(addr, ((SentimentFS_Type)jcasType).casFeatCode_sentimentType);} + + /** setter for sentimentType - sets + * @generated */ + public void setSentimentType(String v) { + if (SentimentFS_Type.featOkTst && ((SentimentFS_Type)jcasType).casFeat_sentimentType == null) + jcasType.jcas.throwFeatMissing("sentimentType", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + jcasType.ll_cas.ll_setStringValue(addr, ((SentimentFS_Type)jcasType).casFeatCode_sentimentType, v);} + + + //*--------------* + //* Feature: score + + /** getter for score - gets + * @generated */ + public String getScore() { + if (SentimentFS_Type.featOkTst && ((SentimentFS_Type)jcasType).casFeat_score == null) + jcasType.jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + return jcasType.ll_cas.ll_getStringValue(addr, ((SentimentFS_Type)jcasType).casFeatCode_score);} + + /** setter for score - sets + * @generated */ + public void setScore(String v) { + if (SentimentFS_Type.featOkTst && ((SentimentFS_Type)jcasType).casFeat_score == null) + jcasType.jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + jcasType.ll_cas.ll_setStringValue(addr, ((SentimentFS_Type)jcasType).casFeatCode_score, v);} + } + + \ No newline at end of file Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,101 @@ + +/* First created by JCasGen Mon Feb 28 10:31:26 CET 2011 */ +package org.apache.uima.alchemy.ts.sentiment; + +import org.apache.uima.jcas.JCas; +import org.apache.uima.jcas.JCasRegistry; +import org.apache.uima.cas.impl.CASImpl; +import org.apache.uima.cas.impl.FSGenerator; +import org.apache.uima.cas.FeatureStructure; +import org.apache.uima.cas.impl.TypeImpl; +import org.apache.uima.cas.Type; +import org.apache.uima.cas.impl.FeatureImpl; +import org.apache.uima.cas.Feature; +import org.apache.uima.jcas.tcas.Annotation_Type; + +/** + * Updated by JCasGen Mon Feb 28 10:31:26 CET 2011 + * @generated */ +public class SentimentFS_Type extends Annotation_Type { + /** @generated */ + protected FSGenerator getFSGenerator() {return fsGenerator;} + /** @generated */ + private final FSGenerator fsGenerator = + new FSGenerator() { + public FeatureStructure createFS(int addr, CASImpl cas) { + if (SentimentFS_Type.this.useExistingInstance) { + // Return eq fs instance if already created + FeatureStructure fs = SentimentFS_Type.this.jcas.getJfsFromCaddr(addr); + if (null == fs) { + fs = new SentimentFS(addr, SentimentFS_Type.this); + SentimentFS_Type.this.jcas.putJfsFromCaddr(addr, fs); + return fs; + } + return fs; + } else return new SentimentFS(addr, SentimentFS_Type.this); + } + }; + /** @generated */ + public final static int typeIndexID = SentimentFS.typeIndexID; + /** @generated + @modifiable */ + public final static boolean featOkTst = JCasRegistry.getFeatOkTst("org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + + /** @generated */ + final Feature casFeat_sentimentType; + /** @generated */ + final int casFeatCode_sentimentType; + /** @generated */ + public String getSentimentType(int addr) { + if (featOkTst && casFeat_sentimentType == null) + jcas.throwFeatMissing("sentimentType", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + return ll_cas.ll_getStringValue(addr, casFeatCode_sentimentType); + } + /** @generated */ + public void setSentimentType(int addr, String v) { + if (featOkTst && casFeat_sentimentType == null) + jcas.throwFeatMissing("sentimentType", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + ll_cas.ll_setStringValue(addr, casFeatCode_sentimentType, v);} + + + + /** @generated */ + final Feature casFeat_score; + /** @generated */ + final int casFeatCode_score; + /** @generated */ + public String getScore(int addr) { + if (featOkTst && casFeat_score == null) + jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + return ll_cas.ll_getStringValue(addr, casFeatCode_score); + } + /** @generated */ + public void setScore(int addr, String v) { + if (featOkTst && casFeat_score == null) + jcas.throwFeatMissing("score", "org.apache.uima.alchemy.ts.sentiment.SentimentFS"); + ll_cas.ll_setStringValue(addr, casFeatCode_score, v);} + + + + + + /** initialize variables to correspond with Cas Type and Features + * @generated */ + public SentimentFS_Type(JCas jcas, Type casType) { + super(jcas, casType); + casImpl.getFSClassRegistry().addGeneratorForType((TypeImpl)this.casType, getFSGenerator()); + + + casFeat_sentimentType = jcas.getRequiredFeatureDE(casType, "sentimentType", "uima.cas.String", featOkTst); + casFeatCode_sentimentType = (null == casFeat_sentimentType) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_sentimentType).getCode(); + + + casFeat_score = jcas.getRequiredFeatureDE(casType, "score", "uima.cas.String", featOkTst); + casFeatCode_score = (null == casFeat_score) ? JCas.INVALID_FEATURE_CODE : ((FeatureImpl)casFeat_score).getCode(); + + } +} + + + + \ No newline at end of file Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/main/java/org/apache/uima/alchemy/ts/sentiment/SentimentFS_Type.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: uima/sandbox/trunk/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.java URL: http://svn.apache.org/viewvc/uima/sandbox/trunk/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.java?rev=1075256&view=auto ============================================================================== --- uima/sandbox/trunk/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.java (added) +++ uima/sandbox/trunk/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.java Mon Feb 28 09:46:03 2011 @@ -0,0 +1,62 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.uima.alchemy.annotator; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.uima.alchemy.ts.sentiment.SentimentFS; +import org.apache.uima.alchemy.utils.TestUtils; +import org.apache.uima.jcas.JCas; +import org.junit.Test; + +/** + * SentimentAnalysis service test + */ + +public class TextSentimentAnalysisAnnotatorTest { + @SuppressWarnings("unchecked") + @Test + public void annotatorIntegrationTest() { + String doc = "The BBC's Jim Muir says the Tunisians have been struggling to cope with the deluge of refugees"; + String xmlPath = "desc/TextSentimentAnalysisAEDescriptor.xml"; + try { + Map<String, Object> parameterSettings = new HashMap<String, Object>(); + parameterSettings.put("apikey", "04490000a72fe7ec5cb3497f14e77f338c86f2fe"); + JCas sentimentJCas = TestUtils.executeAE(TestUtils.getAE(xmlPath, parameterSettings), doc); + List<SentimentFS> sentimentList = (List<SentimentFS>) TestUtils.getAllFSofType( + SentimentFS.type, sentimentJCas); + assertTrue(sentimentList != null); + assertTrue(sentimentList.size() == 1); + SentimentFS sentimentFS = sentimentList.get(0); + assertTrue(sentimentFS != null); + assertTrue(sentimentFS.getSentimentType() != null + && "negative".equals(sentimentFS.getSentimentType())); + assertTrue(sentimentFS.getScore() != null && Double.valueOf(sentimentFS.getScore()) < 0); + } catch (Exception e) { + e.printStackTrace(); + fail(e.toString()); + } + } + +} Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.java ------------------------------------------------------------------------------ svn:keywords = Date Author Id Revision HeadURL Propchange: uima/sandbox/trunk/AlchemyAPIAnnotator/src/test/java/org/apache/uima/alchemy/annotator/TextSentimentAnalysisAnnotatorTest.java ------------------------------------------------------------------------------ svn:mime-type = text/plain