Skip to content

Commit

Permalink
Fixing EditSpellChecking
Browse files Browse the repository at this point in the history
  • Loading branch information
marigostra committed Jun 11, 2022
1 parent 10e7c9f commit cfce4d4
Show file tree
Hide file tree
Showing 11 changed files with 73 additions and 14 deletions.
34 changes: 33 additions & 1 deletion src/main/java/org/luwrain/controls/EditSpellChecking.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,48 @@
import java.util.*;

import org.luwrain.core.*;
import org.luwrain.nlp.*;
import static org.luwrain.controls.EditUtils.*;

public class EditSpellChecking implements EditArea.ChangeListener
{
private final Luwrain luwrain;
private final SpellChecker checker = new SpellCheckerFactory().newChecker("ru");
public EditSpellChecking(Luwrain luwrain )
{
NullCheck.notNull(luwrain, "luwrain ");
this .luwrain = luwrain;
}

@Override public void onEditChange(EditArea editArea, MarkedLines lines, HotPoint hotPoint)
{
final SortedMap<Integer, String> text = new TreeMap<>();
blockBounds(editArea, hotPoint.getHotPointY(),(line, marks)->(!line.trim().isEmpty()),
(lines_, index)->text.put(index, lines.getLine(index)));
luwrain.executeBkg(()->check(editArea, text));
}


private void check(EditArea editArea, SortedMap<Integer, String> text)
{
final List<String> textLines = new ArrayList<>();
for(Map.Entry<Integer, String> e: text.entrySet())
textLines.add(e.getValue());
final SpellText spellText = new SpellText(textLines.toArray(new String[textLines.size()]), checker);
final List<List<LineMarks.Mark>> marks = spellText.buildMarks();
luwrain.runUiSafely(()->setResult(editArea, text, marks));
}

private void setResult(EditArea editArea, SortedMap<Integer, String> text, List<List<LineMarks.Mark>> marks)
{
editArea.update((lines, hotPoint)->{
int index = 0;
for(Map.Entry<Integer, String> e: text.entrySet())
{
final int lineIndex = e.getKey().intValue();
lines.setLineMarks(lineIndex, new DefaultLineMarks.Builder(lines.getLineMarks(lineIndex)).addAll(marks.get(index)).build());
index++;
}
return false;
});
}
}
2 changes: 1 addition & 1 deletion src/main/java/org/luwrain/nlp/SpellCheckerFactory.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@

package org.luwrain.nlp;

import org.luwrain.nlp.ru.spell.*;
import org.luwrain.nlp.ru.spell.RuSpellChecker;

public final class SpellCheckerFactory
{
Expand Down
6 changes: 4 additions & 2 deletions src/main/java/org/luwrain/nlp/SpellText.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,20 +26,22 @@
public class SpellText
{
final String text;
private final List<Fragment> fragments = new ArrayList<>();
private List<SpellProblem> problems;
final List<Fragment> fragments = new ArrayList<>();
final List<SpellProblem> problems;

public SpellText(String[] text, SpellChecker checker)
{
if (text.length == 0)
{
this.text = "";
this.problems = Arrays.asList();
return;
}
if (text.length == 1)
{
this.text = text[0];
fragments.add(new Fragment(0, text[0].length()));
this.problems = checker.check(this.text);
return;
}
final StringBuilder b = new StringBuilder();
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/luwrain/nlp/ru/AbstractTokenizer.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2012-2020 Michael Pozhidaev <[email protected]>
Copyright 2012-2022 Michael Pozhidaev <[email protected]>
This file is part of LUWRAIN.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/luwrain/nlp/ru/GramAttr.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2012-2020 Michael Pozhidaev <[email protected]>
Copyright 2012-2022 Michael Pozhidaev <[email protected]>
This file is part of LUWRAIN.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/luwrain/nlp/ru/ReaderTokenizer.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2012-2020 Michael Pozhidaev <[email protected]>
Copyright 2012-2022 Michael Pozhidaev <[email protected]>
This file is part of LUWRAIN.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/luwrain/nlp/ru/Token.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2012-2020 Michael Pozhidaev <[email protected]>
Copyright 2012-2022 Michael Pozhidaev <[email protected]>
This file is part of LUWRAIN.
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/luwrain/nlp/ru/TokenPlaceholder.java
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
Copyright 2012-2020 Michael Pozhidaev <[email protected]>
Copyright 2012-2022 Michael Pozhidaev <[email protected]>
This file is part of LUWRAIN.
Expand Down
9 changes: 6 additions & 3 deletions src/main/java/org/luwrain/nlp/ru/spell/Problem.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,22 +23,25 @@
final class Problem implements SpellProblem
{
private final String message, shortMessage;
private final int fromPos, toPos;

Problem(RuleMatch match)
{
this.message = match.getMessage();
this.shortMessage = match.getShortMessage();
this.fromPos = match.getFromPos();
this.toPos = match.getToPos();
/*
List<SuggestedReplacement> repl = r.getSuggestedReplacementObjects();
for(SuggestedReplacement rr: repl)
System.out.println(rr);
rr;
*/
}

@Override public String getComment() { return message; }
@Override public String getShortComment(){ return shortMessage; }
@Override public int getStart(){ return 0; }
@Override public int getEnd(){ return 0;}
@Override public int getStart(){ return fromPos; }
@Override public int getEnd(){ return toPos;}

@Override public String toString()
{
Expand Down
1 change: 0 additions & 1 deletion src/main/java/org/luwrain/nlp/ru/spell/RuSpellChecker.java
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ public RuSpellChecker()
final List<SpellProblem> res = new ArrayList<>();
try {
final List<RuleMatch> m = langTool.check(text);
System.out.println("match " + m.size());
for(RuleMatch mm: m)
res.add(new Problem(mm));
return res;
Expand Down
25 changes: 24 additions & 1 deletion src/test/java/org/luwrain/io/nlp/SpellTextTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

package org.luwrain.nlp;

import java.util.*;
import org.junit.*;

import org.luwrain.core.*;
Expand All @@ -24,8 +25,30 @@ public class SpellTextTest extends Assert
{
private SpellChecker checker = null;

@Test public void main()
@Test public void shortSent()
{
final String text = "Это было превосходная день!";
final SpellText t = new SpellText(new String[]{text}, checker);
assertNotNull(t.fragments);
assertEquals(1, t.fragments.size());
assertNotNull(t.problems);
assertEquals(1, t.problems.size());
final List<List<LineMarks.Mark>> res = t.buildMarks();
assertNotNull(res);
assertEquals(1, res.size());
List<LineMarks.Mark> marks = res.get(0);
assertNotNull(marks);
assertEquals(1, marks.size());
final LineMarks.Mark mark = marks.get(0);
assertNotNull(mark);
final SpellProblem problem = (SpellProblem)mark.getMarkObject();
assertNotNull(problem);
assertEquals("Прилагательное не согласуется с существительным по роду.", problem.getComment());
assertEquals("", problem.getShortComment());
final int
start = problem.getStart(),
end = problem.getEnd();
assertEquals("превосходная день", text.substring(start, end));
}

@Before public void create()
Expand Down

0 comments on commit cfce4d4

Please sign in to comment.