I would rather use an example for a very simple "Keyword" extraction engine that uses Upper Case words as keywords and writes them as fise:TextAnnotations
Here is some basic Code that should work MGraph m = ci.getMetadata(); LiteralFactory lf = LiteralFactory.getInstance(); String text = ContentItemHelper.getText(ci.getBlob()); String delims = " -"; StringTokenizer tokens = new StringTokenizer(text,delims,true); int offset = 0; int keywordStart = -1; int keywordEnd = -1; while(tokens.hasMoreElements()){ String token = tokens.nextToken(); if(token.length() == 1 && delims.indexOf(token.charAt(0)) >= 0){ offset++; } else if(Character.isUpperCase(token.codePointAt(0))){ //a real word if(keywordStart < 0){ keywordStart = offset; } keywordEnd = offset + token.length(); } else { //not a keyword if(keywordStart > 0){ //write out a keyword String keyword = text.substring(keywordStart,keywordEnd); String context = EnhancementEngineHelper.getSelectionContext( text, keyword,keywordStart); UriRef ta = EnhancementEngineHelper.createTextEnhancement(ci, this); m.add(new TripleImpl(ta, Properties.ENHANCER_START, lf.createTypedLiteral(keywordStart))); m.add(new TripleImpl(ta, Properties.ENHANCER_END, lf.createTypedLiteral(keywordEnd))); m.add(new TripleImpl(ta, Properties.ENHANCER_SELECTED_TEXT, new PlainLiteralImpl(keyword))); m.add(new TripleImpl(ta, Properties.ENHANCER_SELECTION_CONTEXT, new PlainLiteralImpl(context))); m.add(new TripleImpl(ta, Properties.ENHANCER_CONFIDENCE, lf.createTypedLiteral(1.0f))); //we are very confident ^ //reset keywordStart = -1; keywordEnd = -1; } } } best Rupert On Fri, Jun 28, 2013 at 9:58 AM, Reto Bachmann-Gmür <r...@wymiwyg.com> wrote: > Hi Rupert > >> I do not like this example. For this I would probably use a simple >> triple from the URI of the ContentItem that notes the length of the >> text as a value. > > Well yeah but it should be an example for an enhancer. A simple one but > still a well behaving one. I understand text annotation is the wrong one > to add a comment to the content item as a whole. Which one would be the > right one? > > Cheers, > Reto > > For a fise:TextAnnotation you should set the >> fise:start/fise:end as well as the fise:selected-text >> >> best >> Rupert >> >> > Cheers, >> > Reto >> > >> > >> > On Thu, Jun 20, 2013 at 3:18 AM, Reto Bachmann-Gmür <r...@wymiwyg.com >>wrote: >> > >> >> Hi Rupert >> >> >> >> Thanks, this explains it. >> >> >> >> In the archetype generated example there's following code: >> >> >> >> UriRef textAnnotation = >> >>> EnhancementEngineHelper.createTextEnhancement(ci, this); >> >>> metadata.add(new TripleImpl(textAnnotation, RDFS.comment, >> >>> new PlainLiteralImpl("A text of " + > content.length() >> >>> + " charaters"))); >> >>> >> >> >> >> I guess TextEnhancement is the wrong type for such a comment on the > text >> >> as a whole. Which type shold be used instead? >> >> >> >> Cheers, >> >> Reto >> >> >> >> >> >> On Wed, Jun 19, 2013 at 2:39 PM, Rupert Westenthaler < >> >> rupert.westentha...@gmail.com> wrote: >> >> >> >>> Hi Reto, >> >>> >> >>> Based on the source of "ContentItemResource" this happens if an >> >>> fise:TextAnnotation does not have a fise:selected-text nor a dc:type >> >>> value. Up to now there where no such fise:TextAnnotation created by >> >>> any engine. But I guess that your Engine does exactly that. >> >>> >> >>> No Idea what the UI should use as label for the mention in such cases >> >>> but causing a NPE ( by calling extractLabel(NULL) in line 590) is >> >>> probably not the best Idea >> >>> >> >>> best >> >>> Rupert >> >>> >> >>> On Wed, Jun 19, 2013 at 1:26 PM, Reto Bachmann-Gmür <r...@apache.org> >> >>> wrote: >> >>> > Hello >> >>> > >> >>> > After deploying a new enhancement engine created from the archetype > I'm >> >>> > getting the exception below for chains that include the enhancer. > I'm >> >>> using >> >>> > the latest trunk version both for the Stanbol instance as well as > for >> >>> the >> >>> > archetype. Any idea what's causing this? >> >>> > >> >>> > Cheers, >> >>> > Reto >> >>> > >> >>> > [java] WARNING: A servlet request, to the URI >> >>> > http://localhost:8080/enhancer/chain/all-active, contains form >> >>> parameters >> >>> > in the request body but the request body has been consumed by the >> >>> servlet >> >>> > or a servlet filter accessing the request parameters. Only resource >> >>> methods >> >>> > using @FormParam will work as expected. Resource methods consuming > the >> >>> > request body by other means will not work as expected. >> >>> > [java] Jun 19, 2013 12:18:14 PM >> >>> > com.sun.jersey.spi.container.ContainerResponse >> >>> mapMappableContainerException >> >>> > [java] SEVERE: The RuntimeException could not be mapped to a >> >>> response, >> >>> > re-throwing to the HTTP container >> >>> > [java] java.lang.NullPointerException >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.enhancer.jersey.resource.ContentItemResource.extractLabel(ContentItemResource.java:280) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.enhancer.jersey.resource.ContentItemResource$EntityExtractionSummary.<init>(ContentItemResource.java:590) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.enhancer.jersey.resource.ContentItemResource.initOccurrences(ContentItemResource.java:398) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.enhancer.jersey.resource.ContentItemResource.<init>(ContentItemResource.java:191) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.enhancer.jersey.resource.AbstractEnhancerUiResource.enhanceFromForm(AbstractEnhancerUiResource.java:131) >> >>> > [java] at > sun.reflect.NativeMethodAccessorImpl.invoke0(Native >> >>> > Method) >> >>> > [java] at >> >>> > >> >>> > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) >> >>> > [java] at >> >>> > >> >>> > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) >> >>> > [java] at java.lang.reflect.Method.invoke(Method.java:601) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.spi.container.JavaMethodInvokerFactory$1.invoke(JavaMethodInvokerFactory.java:60) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:205) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:302) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1480) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1411) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1360) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1350) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:538) >> >>> > [java] at >> >>> > >> >>> > com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:716) >> >>> > [java] at >> >>> > javax.servlet.http.HttpServlet.service(HttpServlet.java:820) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.ServletHandler.doHandle(ServletHandler.java:96) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.ServletHandler.handle(ServletHandler.java:79) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.ServletPipeline.handle(ServletPipeline.java:42) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:49) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.commons.httpqueryheaders.impl.QueryHeadersFilter.doFilter(QueryHeadersFilter.java:75) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:88) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:76) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:78) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.commons.web.resources.ResourceServingFilter.doFilterHttp(ResourceServingFilter.java:148) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.commons.web.resources.ResourceServingFilter.doFilter(ResourceServingFilter.java:91) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:88) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:76) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.commons.security.auth.AuthenticatingFilter$1.run(AuthenticatingFilter.java:163) >> >>> > [java] at > java.security.AccessController.doPrivileged(Native >> >>> > Method) >> >>> > [java] at >> >>> > javax.security.auth.Subject.doAsPrivileged(Subject.java:536) >> >>> > [java] at >> >>> > >> >>> > org.apache.stanbol.commons.security.auth.AuthenticatingFilter.doFilter(AuthenticatingFilter.java:159) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.FilterHandler.doHandle(FilterHandler.java:88) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.handler.FilterHandler.handle(FilterHandler.java:76) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.InvocationFilterChain.doFilter(InvocationFilterChain.java:47) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.HttpFilterChain.doFilter(HttpFilterChain.java:33) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.FilterPipeline.dispatch(FilterPipeline.java:48) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.dispatch.Dispatcher.dispatch(Dispatcher.java:39) >> >>> > [java] at >> >>> > >> >>> > org.apache.felix.http.base.internal.DispatcherServlet.service(DispatcherServlet.java:67) >> >>> > [java] at >> >>> > javax.servlet.http.HttpServlet.service(HttpServlet.java:820) >> >>> > [java] at >> >>> > > org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) >> >>> > [java] at >> >>> > > org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) >> >>> > [java] at >> >>> > > org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) >> >>> > [java] at >> >>> > > org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) >> >>> > [java] at >> >>> > > org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) >> >>> > [java] at org.mortbay.jetty.Server.handle(Server.java:326) >> >>> > [java] at >> >>> > > org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) >> >>> > [java] at >> >>> > >> >>> > org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:943) >> >>> > [java] at >> >>> > org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) >> >>> > [java] at >> >>> > org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) >> >>> > [java] at >> >>> > org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) >> >>> > [java] at >> >>> > >> >>> > org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) >> >>> > [java] at >> >>> > >> >>> > org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) >> >>> > [java] >> >>> >> >>> >> >>> >> >>> -- >> >>> | Rupert Westenthaler rupert.westentha...@gmail.com >> >>> | Bodenlehenstraße 11 ++43-699-11108907 >> >>> | A-5500 Bischofshofen >> >>> >> >> >> >> >> >> >> >> -- >> | Rupert Westenthaler rupert.westentha...@gmail.com >> | Bodenlehenstraße 11 ++43-699-11108907 >> | A-5500 Bischofshofen -- | Rupert Westenthaler rupert.westentha...@gmail.com | Bodenlehenstraße 11 ++43-699-11108907 | A-5500 Bischofshofen