[
https://issues.apache.org/jira/browse/OPENNLP-589?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17836991#comment-17836991
]
ASF GitHub Bot commented on OPENNLP-589:
----------------------------------------
rzo1 commented on code in PR #596:
URL: https://github.com/apache/opennlp/pull/596#discussion_r1564855870
##########
opennlp-tools/src/main/java/opennlp/tools/ml/maxent/RealBasicEventStream.java:
##########
@@ -49,13 +55,14 @@ public Event read() throws IOException {
}
private Event createEvent(String obs) {
- int lastSpace = obs.lastIndexOf(' ');
- if (lastSpace == -1)
+ int si = obs.indexOf(' ');
+ if (si == 0)
Review Comment:
Shouldn't that be `-1` ? Otherwise, it might produce an index out of bound
exception in the else branch.
##########
opennlp-tools/src/test/java/opennlp/tools/ml/maxent/RealBasicEventStreamTest.java:
##########
@@ -0,0 +1,107 @@
+/*
+ * 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 opennlp.tools.ml.maxent;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import opennlp.tools.ml.AbstractEventStreamTest;
+import opennlp.tools.ml.model.Event;
+import opennlp.tools.ml.model.RealValueFileEventStream;
+import opennlp.tools.util.InputStreamFactory;
+import opennlp.tools.util.ObjectStream;
+import opennlp.tools.util.PlainTextByLineStream;
+
+import static org.junit.jupiter.api.Assertions.fail;
+
+/**
+ * Verifies that the textual event (input) format in {@link
RealBasicEventStream} is:
+ * <br/>
+ * {@code outcome context1 context2 context3 ...}
+ * <p>
+ * and is consistent with {@link RealValueFileEventStream}. Moreover, the test
checks that processing
+ * given input works as expected.
+ * <p>
+ * Reported in and adjusted via:
+ * <a
href="https://issues.apache.org/jira/projects/OPENNLP/issues/OPENNLP-589">OPENNLP-589</a>.
+ *
+ * @see ObjectStream
+ * @see RealValueFileEventStream
+ */
+public class RealBasicEventStreamTest extends AbstractEventStreamTest {
+
+ @Override
+ protected RealBasicEventStream createEventStream(String input) throws
IOException {
+ InputStreamFactory factory = () -> new
ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8));
+ ObjectStream<String> stream = new PlainTextByLineStream(factory,
StandardCharsets.UTF_8);
+ return new RealBasicEventStream(stream);
+ }
+
+ /**
+ * See: {@link AbstractEventStreamTest#EVENTS} for the input data.
+ */
+ @Test
+ void testReadWithValidInput() throws IOException {
+ try (ObjectStream<Event> eventStream = createEventStream(EVENTS)) {
+ Assertions.assertEquals("other [wc=ic=1.0 w&c=he,ic=2.0 n1wc=lc=3.0
n1w&c=belongs,lc=4.0 n2wc=lc=5.0]",
+ eventStream.read().toString());
+ Assertions.assertEquals("other [wc=lc=1.0 w&c=belongs,lc=2.0 p1wc=ic=3.0
p1w&c=he,ic=4.0 n1wc=lc=5.0]",
+ eventStream.read().toString());
+ Assertions.assertEquals("other [wc=lc=1.0 w&c=to,lc=2.0 p1wc=lc=3.0
p1w&c=belongs,lc=4.0 p2wc=ic=5.0]",
+ eventStream.read().toString());
+ Assertions.assertEquals("org-start [wc=ic=1.0 w&c=apache,ic=2.0
p1wc=lc=3.0 p1w&c=to,lc=4.0]",
+ eventStream.read().toString());
+ Assertions.assertEquals("org-cont [wc=ic=1.0 w&c=software,ic=2.0
p1wc=ic=3.0 p1w&c=apache,ic=4.0]",
+ eventStream.read().toString());
+ Assertions.assertEquals("org-cont [wc=ic=1.0 w&c=foundation,ic=2.0
p1wc=ic=3.0 p1w&c=software,ic=4.0]",
+ eventStream.read().toString());
+ Assertions.assertEquals("other [wc=other=1.0 w&c=.,other=2.0
p1wc=ic=3.0]",
+ eventStream.read().toString());
+ Assertions.assertNull(eventStream.read());
+ }
+ }
+
+ @Test
+ void testReatWithInvalidNegativeValues() throws IOException {
Review Comment:
`Reat`-> `Read`
> Text format of Events inconsistent across different implementations of
> EventStreamReaders
> -----------------------------------------------------------------------------------------
>
> Key: OPENNLP-589
> URL: https://issues.apache.org/jira/browse/OPENNLP-589
> Project: OpenNLP
> Issue Type: Bug
> Components: Machine Learning
> Affects Versions: maxent-3.0.3, 2.0.0, 2.1.0, 2.2.0, 2.3.0
> Reporter: Marcin Junczys-Dowmunt
> Assignee: Martin Wiesner
> Priority: Minor
> Fix For: 2.3.3
>
>
> BasicEventStream expects events to be written to text files as:
> context1 context2 context3 ... outcome
> FileEventStream expects events to be written to text files as:
> outcome context1 context2 context3 ...
> toString() of Event creates:
> outcome [context1 context2 context3 ...] (note the square brackets, which are
> part of context predicates when breaking on spaces).
> This is highly confusing and took me some time to understand. I guess this
> should be unified?
--
This message was sent by Atlassian Jira
(v8.20.10#820010)