morfologik-svn Mailing List for Morfologik
Brought to you by:
dawidweiss,
milek_pl
You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(6) |
Sep
(7) |
Oct
(2) |
Nov
|
Dec
(5) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
|
Feb
(5) |
Mar
(7) |
Apr
(11) |
May
(16) |
Jun
|
Jul
|
Aug
(2) |
Sep
(22) |
Oct
(2) |
Nov
|
Dec
(8) |
2008 |
Jan
(2) |
Feb
(1) |
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(5) |
2009 |
Jan
(3) |
Feb
(1) |
Mar
(40) |
Apr
(3) |
May
|
Jun
(1) |
Jul
|
Aug
(9) |
Sep
(5) |
Oct
|
Nov
|
Dec
|
2010 |
Jan
|
Feb
(9) |
Mar
(11) |
Apr
(43) |
May
(2) |
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(7) |
Nov
(51) |
Dec
|
2011 |
Jan
(19) |
Feb
(15) |
Mar
(2) |
Apr
(23) |
May
|
Jun
(12) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
2012 |
Jan
|
Feb
|
Mar
(1) |
Apr
|
May
(4) |
Jun
(34) |
Jul
|
Aug
|
Sep
|
Oct
(5) |
Nov
|
Dec
|
2013 |
Jan
|
Feb
|
Mar
(11) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
|
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
(2) |
11
|
12
|
13
|
14
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
(1) |
24
|
25
|
26
(1) |
27
(2) |
28
(1) |
29
|
30
|
From: <daw...@us...> - 2006-09-28 07:19:41
|
Revision: 26 http://svn.sourceforge.net/morfologik/?rev=26&view=rev Author: dawidweiss Date: 2006-09-28 00:19:27 -0700 (Thu, 28 Sep 2006) Log Message: ----------- Removed deprecated methods and classes. When we make the next release, they'll be gone. Modified Paths: -------------- lametyzator/trunk/build.xml lametyzator/trunk/src/com/dawidweiss/fsa/FSA.java lametyzator/trunk/src/com/dawidweiss/fsa/FSAVer5Impl.java lametyzator/trunk/src/com/dawidweiss/fsa/util/FSAStemmer.java lametyzator/trunk/version.txt Removed Paths: ------------- lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java Modified: lametyzator/trunk/build.xml =================================================================== --- lametyzator/trunk/build.xml 2006-09-27 19:34:53 UTC (rev 25) +++ lametyzator/trunk/build.xml 2006-09-28 07:19:27 UTC (rev 26) @@ -3,7 +3,7 @@ <defaultexcludes add="**/CVS"/> <property name="build.name" value="stempelator" /> - <property name="build.ver" value="1.0.5"/> + <property name="build.ver" value="HEAD"/> <property name="tmp.dir" value="tmp" /> <property name="build.dir" value="${tmp.dir}/build"/> Modified: lametyzator/trunk/src/com/dawidweiss/fsa/FSA.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSA.java 2006-09-27 19:34:53 UTC (rev 25) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSA.java 2006-09-28 07:19:27 UTC (rev 26) @@ -194,16 +194,7 @@ */ public abstract FSA.Node getStartNode(); - /** - * @deprecated Deprecated, use {@link #getTraversalHelper()}. - */ - public FSATraversalHelper getTraverseHelper() - { - return this.getTraversalHelper(); - } - - /** * @return Returns an object which can be used to traverse a finite * state automaton. * @@ -279,11 +270,6 @@ */ public boolean isLast(); - /** - * @deprecated Use {@link #isFinal()} instead. - */ - public boolean pointsToFinalNode(); - /** * @return Returns <code>true</code> if this arc does not have a terminating {@link FSA.Node}, * a call to {@link #getDestinationNode()} should thrown an exception on this arc. Deleted: lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java 2006-09-27 19:34:53 UTC (rev 25) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java 2006-09-28 07:19:27 UTC (rev 26) @@ -1,11 +0,0 @@ - -package com.dawidweiss.fsa; - - -/** - * @deprecated Use {@link FSATraversalHelper}. - */ -public final class FSATraverseHelper extends FSATraversalHelper -{ - -} \ No newline at end of file Modified: lametyzator/trunk/src/com/dawidweiss/fsa/FSAVer5Impl.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSAVer5Impl.java 2006-09-27 19:34:53 UTC (rev 25) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSAVer5Impl.java 2006-09-28 07:19:27 UTC (rev 26) @@ -155,14 +155,6 @@ return (0 == getDestinationNodeOffset()); } - /** - * @deprecated Use {@link #isFinal()} instead. - */ - public final boolean pointsToFinalNode() - { - return isFinal(); - } - /** Returns the address of the node pointed to by this arc. */ private int getDestinationNodeOffset() { Modified: lametyzator/trunk/src/com/dawidweiss/fsa/util/FSAStemmer.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/util/FSAStemmer.java 2006-09-27 19:34:53 UTC (rev 25) +++ lametyzator/trunk/src/com/dawidweiss/fsa/util/FSAStemmer.java 2006-09-28 07:19:27 UTC (rev 26) @@ -106,7 +106,7 @@ // The situation when the arc points to a final node should NEVER happen. After all, // we want the word to have SOME base form. - if (arc != null && !arc.pointsToFinalNode()) + if (arc != null && !arc.isFinal()) { // there is such word in the dictionary. Return its base forms. final ArrayList forms = new ArrayList(1); Modified: lametyzator/trunk/version.txt =================================================================== --- lametyzator/trunk/version.txt 2006-09-27 19:34:53 UTC (rev 25) +++ lametyzator/trunk/version.txt 2006-09-28 07:19:27 UTC (rev 26) @@ -1,4 +1,6 @@ + Removed deprecated methods and classes. + 1.0.5 Added filler and separator char dumps to FSADump. * A major bug in automaton traversal corrected. Upgrade when possible. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <daw...@us...> - 2006-09-27 19:35:00
|
Revision: 25 http://svn.sourceforge.net/morfologik/?rev=25&view=rev Author: dawidweiss Date: 2006-09-27 12:34:53 -0700 (Wed, 27 Sep 2006) Log Message: ----------- Version increased to 1.0.5 Modified Paths: -------------- lametyzator/trunk/build.xml Modified: lametyzator/trunk/build.xml =================================================================== --- lametyzator/trunk/build.xml 2006-09-27 19:13:43 UTC (rev 24) +++ lametyzator/trunk/build.xml 2006-09-27 19:34:53 UTC (rev 25) @@ -3,7 +3,7 @@ <defaultexcludes add="**/CVS"/> <property name="build.name" value="stempelator" /> - <property name="build.ver" value="1.0.4"/> + <property name="build.ver" value="1.0.5"/> <property name="tmp.dir" value="tmp" /> <property name="build.dir" value="${tmp.dir}/build"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <daw...@us...> - 2006-09-27 19:14:46
|
Revision: 24 http://svn.sourceforge.net/morfologik/?rev=24&view=rev Author: dawidweiss Date: 2006-09-27 12:13:43 -0700 (Wed, 27 Sep 2006) Log Message: ----------- Added filler and separator char dumps to FSADump. * A major bug in automaton traversal corrected. Upgrade when possible. Certain API changes were introduced; older methods are now deprecated and will be removed in the future. Modified Paths: -------------- lametyzator/trunk/src/com/dawidweiss/fsa/FSA.java lametyzator/trunk/src/com/dawidweiss/fsa/FSAHelpers.java lametyzator/trunk/src/com/dawidweiss/fsa/FSAMatch.java lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java lametyzator/trunk/src/com/dawidweiss/fsa/FSAVer5Impl.java lametyzator/trunk/src/com/dawidweiss/fsa/util/FSADump.java lametyzator/trunk/src/com/dawidweiss/fsa/util/FSAFind.java lametyzator/trunk/src/com/dawidweiss/fsa/util/FSAStemmer.java lametyzator/trunk/version.txt Added Paths: ----------- lametyzator/trunk/src/com/dawidweiss/fsa/FSAFinalStatesIterator.java lametyzator/trunk/src/com/dawidweiss/fsa/FSATraversalHelper.java lametyzator/trunk/src-test/com/dawidweiss/fsa/ lametyzator/trunk/src-test/com/dawidweiss/fsa/FSATraversalTest.java lametyzator/trunk/src-test/com/dawidweiss/fsa/en_tst.dict Removed Paths: ------------- lametyzator/trunk/src/com/dawidweiss/fsa/FSAAbstractNode.java Modified: lametyzator/trunk/src/com/dawidweiss/fsa/FSA.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSA.java 2006-09-26 21:40:50 UTC (rev 23) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSA.java 2006-09-27 19:13:43 UTC (rev 24) @@ -10,6 +10,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; @@ -17,11 +18,11 @@ * FSA (Finite State Automaton) traversal implementation, abstract base class * for all versions of FSA. * - * This class implements Finite State Automaton traversal as described in Jan Daciuk's + * <p>This class implements Finite State Automaton traversal as described in Jan Daciuk's * <i>Incremental Construction of Finite-State Automata and Transducers, and Their * Use in the Natural Language Processing</i> (PhD thesis, Technical University of Gdansk). * - * This is a Java port of the original <code>fsa</code> class, implemented by + * <p>This is a Java port of the original <code>fsa</code> class, implemented by * Jan Daciuk in the FSA package. Major redesign has been done, however, to fit this * implementation to the specifics of Java language and its coding style. * @@ -34,30 +35,44 @@ * They indicate how transitions (arcs) and nodes are stored. More info * in the original FSA package. */ - public final transient static int FSA_FLEXIBLE = 1 << 0; - public final transient static int FSA_STOPBIT = 1 << 1; - public final transient static int FSA_NEXTBIT = 1 << 2; - public final transient static int FSA_TAILS = 1 << 3; - public final transient static int FSA_WEIGHTED = 1 << 4; - public final transient static int FSA_LARGE_DICTIONARIES = 1 << 5; + public final static int FSA_FLEXIBLE = 1 << 0; + public final static int FSA_STOPBIT = 1 << 1; + public final static int FSA_NEXTBIT = 1 << 2; + public final static int FSA_TAILS = 1 << 3; + public final static int FSA_WEIGHTED = 1 << 4; + public final static int FSA_LARGE_DICTIONARIES = 1 << 5; + + /** + * Version number for version 5 of the automaton. + */ + public final static byte VERSION_5 = 5; /** Dictionary version (derived from the combination of flags). */ - protected byte version; + protected byte version; /** The meaning of this field is not clear (check the FSA docs). */ - protected byte filler; + protected byte filler; - /** Annotation separator is a special character used for separating "tokens" in a FSA. - * For instance an inflected form of a word may be separated from the base form. + /** + * Annotation separator is a special character used for separating "tokens" in a FSA. + * For instance an inflected form of a word may be separated from the base form. + * + * @since 1.0.5 */ - protected byte annotationSeparator; + private byte annotationSeparator; - /** Size of transition's destination node "address". This field may also - * have different interpretation, or may not be used at all. It depends on - * the combination of flags used for building FSA. + /** + * Size of transition's destination node "address". This field may also + * have different interpretation, or may not be used at all. It depends on + * the combination of flags used for building FSA. */ - protected byte gotoLength; + protected byte gotoLength; + /** + * The encoding (codepage) in which the dictionary has been compiled; byte-to-character + * conversion scheme. + */ + private String dictionaryEncoding; /** * Creates a new automaton reading the FSA automaton from an input stream. @@ -72,29 +87,34 @@ if (fsaStream == null) throw new IllegalArgumentException("The input stream must not be null."); + if (dictionaryEncoding == null) { + throw new IllegalArgumentException("Dictionary encoding must not be null."); + } + this.dictionaryEncoding = dictionaryEncoding; + /* This implementation requires the length of stream to be known in advance. Preload the dictionary entirely. */ - byte [] fsa = readFullyAndCloseInput(fsaStream); + final byte [] fsa = readFullyAndCloseInput(fsaStream); DataInputStream input = null; - try - { - input = new DataInputStream( new ByteArrayInputStream( fsa )); - readFromStream( input, fsa.length ); - } - finally - { - if (input!=null) + try { + input = new DataInputStream(new ByteArrayInputStream(fsa)); + readFromStream(input, fsa.length); + } finally { + if (input != null) { try { input.close(); } catch (IOException e) { /* Don't do anything. */ } + } } } - /** Returns a version number of this FSA. - * The version number is a derivation of combination of flags and is exactly - * the same as in Jan Daciuk's FSA package. + /** + * Returns a version number of this FSA. + * + * <p>The version number is a derivation of combination of flags and is exactly + * the same as in Jan Daciuk's FSA package. */ - public int getVersion() + public final int getVersion() { return version; } @@ -107,12 +127,53 @@ * flag, one must perform a bitwise AND: * <code>boolean isFlexible = ((dict.getFlags() & FSA.FSA_FLEXIBLE ) != 0)</code> */ - public int getFlags() + public final int getFlags() { return FSAHelpers.getFlags( version ); } + /** + * @return Return the annotation separator character, converted to a character + * according to the encoding scheme passed in in the constructor of this class. + * + * @since 1.0.5 + */ + public final char getAnnotationSeparator() { + try { + final String annotationChar = new String( + new byte [] {this.annotationSeparator}, + this.dictionaryEncoding); + if (annotationChar.length() != 1) { + throw new RuntimeException("Unexpected annotation character length (should be 1): " + + annotationChar.length()); + } + return annotationChar.charAt(0); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + /** + * @return Return the filler character, converted to a character + * according to the encoding scheme passed in in the constructor of this class. + * + * @since 1.0.5 + */ + public final char getFillerCharacter() { + try { + final String fillerChar = new String( + new byte [] {this.filler}, + this.dictionaryEncoding); + if (fillerChar.length() != 1) { + throw new RuntimeException("Unexpected filler character length (should be 1): " + + fillerChar.length()); + } + return fillerChar.charAt(0); + } catch (UnsupportedEncodingException e) { + throw new RuntimeException(e); + } + } + /** * Returns the number of arcs in this automaton. <b>Depending on the representation * of the automaton, this method may take a long time to finish.</b> @@ -135,16 +196,22 @@ /** - * Returns an object which can be used to traverse FSA. - * The default implementation simply uses the public methods - * of FSA, FSA.Node and FSA.Arc classes, but specific implementations - * of FSA may return an optimized version of this class. + * @deprecated Deprecated, use {@link #getTraversalHelper()}. */ - public FSATraverseHelper getTraverseHelper() + public FSATraversalHelper getTraverseHelper() { - return new FSATraverseHelper(); + return this.getTraversalHelper(); } + /** + * @return Returns an object which can be used to traverse a finite + * state automaton. + * + * @since 1.0.5 + */ + public FSATraversalHelper getTraversalHelper() { + return new FSATraversalHelper(); + } /** * A node of the FSA. @@ -162,10 +229,10 @@ public Arc getFirstArc(); /** - * Returns a subsequent arc of this node. null is returned when + * Returns a subsequent arc of this node, <code>null</code> is returned when * no more arcs are available. */ - public Arc getNextArc( Arc arc ); + public Arc getNextArc(Arc arc); /** * Returns an arc with a given label, if it exists in this node. @@ -173,7 +240,7 @@ * the list of arcs from the first, to the last - implementations * of Node may implement a more efficient algorithm, if possible. */ - public Arc getArcLabelledWith( byte label ); + public Arc getArcLabelledWith(byte label); } @@ -186,16 +253,44 @@ public interface Arc { /** - * Returns the destination node, pointed to by this arc. - * If this arc points to a final node, null is returned. + * Returns the destination node, pointed to by this arc. Terminal nodes + * throw a {@link RuntimeException} on this method. */ public Node getDestinationNode(); - /** Returns the label of this arc. */ + /** + * Returns the label of this arc. + */ public byte getLabel(); - /** Returns true if the destination node is a final node (final state of the FSA). */ + /** + * @return Returns <code>true</code> if the destination node corresponds to an input + * sequence of this automaton. + * + * @since 1.0.5 + */ + public boolean isFinal(); + + /** + * @return Returns <code>true</code> if this arc is the last one of the owner node's + * arcs. + * + * @since 1.0.5 + */ + public boolean isLast(); + + /** + * @deprecated Use {@link #isFinal()} instead. + */ public boolean pointsToFinalNode(); + + /** + * @return Returns <code>true</code> if this arc does not have a terminating {@link FSA.Node}, + * a call to {@link #getDestinationNode()} should thrown an exception on this arc. + * + * @since 1.0.5 + */ + public boolean isTerminal(); } Deleted: lametyzator/trunk/src/com/dawidweiss/fsa/FSAAbstractNode.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSAAbstractNode.java 2006-09-26 21:40:50 UTC (rev 23) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSAAbstractNode.java 2006-09-27 19:13:43 UTC (rev 24) @@ -1,30 +0,0 @@ - -package com.dawidweiss.fsa; - -/** - * An abstract class implementing some of FSA.Node functionality. This class - * can only be accessed from within package scope. - * - * @author Dawid Weiss - */ -abstract class FSAAbstractNode - implements FSA.Node -{ - /** Returns an arc with a given label, if it exists in this node. - * The default implementation in FSAAbstractNode simply traverses - * the list of arcs from the first, to the last - implementations - * of Node may implement a more efficient algorithm, if possible. - */ - public FSA.Arc getArcLabelledWith( byte label ) - { - FSA.Arc arc; - - for (arc = getFirstArc(); arc!=null; arc = getNextArc( arc )) - { - if (arc.getLabel() == label) - return arc; - } - // arc labelled with "label" not found. - return null; - } -} \ No newline at end of file Added: lametyzator/trunk/src/com/dawidweiss/fsa/FSAFinalStatesIterator.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSAFinalStatesIterator.java (rev 0) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSAFinalStatesIterator.java 2006-09-27 19:13:43 UTC (rev 24) @@ -0,0 +1,148 @@ +package com.dawidweiss.fsa; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.NoSuchElementException; + +import com.dawidweiss.fsa.FSA.Node; + +/** + * <p>An iterator that traverses all final states reachable + * from a given {@link FSA.Node} and returns {@link String} objects + * corresponding to final states. + * + * @author Dawid Weiss + */ +public final class FSAFinalStatesIterator implements Iterator { + /** + * Default expected depth of the recursion stack (estimated longest + * sequence in the automaton). Buffers expand by the same value if exceeded. + */ + private final static int EXPECTED_MAX_STATES = 15; + + /** An internal cache for the next element in the FSA */ + private byte[] nextElement = null; + + /** + * A buffer for the current sequence of bytes from the current node + * to the root. + */ + private byte [] buffer = new byte[EXPECTED_MAX_STATES]; + + private final ArrayList nodes = new ArrayList(EXPECTED_MAX_STATES); + private final ArrayList arcs = new ArrayList(EXPECTED_MAX_STATES); + + /** + * Create an instance of the iterator for a given + * node. + */ + FSAFinalStatesIterator(FSA.Node node) { + if (node.getFirstArc() != null) { + pushNode(node); + } + } + + /** Returns <code>true</code> if there are still elements in this iterator. */ + public boolean hasNext() + { + if (nextElement == null) { + nextElement = advance(); + } + + return nextElement != null; + } + + /** + * Overriden from {@link Iterator}. Use {@link #nextState()} if you + * can to avoid cast. + * + * @return Returns <code>byte[]</code> with the next final state + * in the automaton. + */ + public Object next() + { + return nextState(); + } + + /** + * Returns the next available element. + * + * @throws NoSuchElementException If this method is called after {@link #hasNext()} + * returned <code>false</code>. + */ + public byte [] nextState() { + if (nextElement != null) + { + final byte[] cache = nextElement; + nextElement = null; + return cache; + } else { + final byte[] cache = advance(); + if (cache == null) { + throw new NoSuchElementException("No next element to traverse."); + } + return cache; + } + } + + /** + * Advances to the next available final state. + */ + private final byte[] advance() + { + if (arcs.isEmpty()) { + return null; + } + + while (!arcs.isEmpty()) { + final int lastIndex = arcs.size() - 1; + final FSA.Arc arc = (FSA.Arc) arcs.get(lastIndex); + final FSA.Node node = (FSA.Node) nodes.get(lastIndex); + + if (arc == null) { + // remove the current node from the queue + arcs.remove(lastIndex); + nodes.remove(lastIndex); + continue; + } + + // Go to the next arc, but leave it on the stack + // so that we keep the recursion depth level accurate. + arcs.set(lastIndex, node.getNextArc(arc)); + + // expand buffer if needed. + final int bufferLength = this.buffer.length; + if (lastIndex >= bufferLength) { + this.buffer = FSAHelpers.resizeByteBuffer(buffer, bufferLength + EXPECTED_MAX_STATES); + } + buffer[lastIndex] = arc.getLabel(); + + if (!arc.isTerminal()) { + // recursively descend into the arc's node. + pushNode(arc.getDestinationNode()); + } + + if (arc.isFinal()) { + final byte [] tempBuffer = new byte [lastIndex + 1]; + System.arraycopy(buffer, 0, tempBuffer, 0, tempBuffer.length); + return tempBuffer; + } + } + + return null; + } + + public final void remove() + { + throw new UnsupportedOperationException("Read-only iterator."); + } + + /** + * Descends to a given node, adds its arcs to the stack to + * be traversed. + */ + private void pushNode(Node node) { + nodes.add(node); + arcs.add(node.getFirstArc()); + } +} \ No newline at end of file Modified: lametyzator/trunk/src/com/dawidweiss/fsa/FSAHelpers.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSAHelpers.java 2006-09-26 21:40:50 UTC (rev 23) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSAHelpers.java 2006-09-27 19:13:43 UTC (rev 24) @@ -1,47 +1,45 @@ package com.dawidweiss.fsa; /** - * This class has several static utility methods for use with the FSA package. + * This class has several static utility methods for use + * with the FSA package. * * @author Dawid Weiss */ public final class FSAHelpers { + private final static int [] aflags = { + FSA.FSA_FLEXIBLE, FSA.FSA_STOPBIT, FSA.FSA_NEXTBIT, FSA.FSA_TAILS, + FSA.FSA_WEIGHTED, FSA.FSA_LARGE_DICTIONARIES }; + private final static String [] sflags = { + "FLEXIBLE", "STOPBIT", "NEXTBIT", "TAILS", + "WEIGHTED", "LARGE_DICTIONARIES" }; + /** Prevent instantiation. */ - private FSAHelpers() {} + private FSAHelpers() {/* empty */} - /** * Converts an integer with FSA flags to a human-readable string. */ - public static String flagsToString( int flags ) + public static String flagsToString(int flags) { - final int [] aflags = { - FSA.FSA_FLEXIBLE, FSA.FSA_STOPBIT, FSA.FSA_NEXTBIT, FSA.FSA_TAILS, - FSA.FSA_WEIGHTED, FSA.FSA_LARGE_DICTIONARIES }; + final StringBuffer res = new StringBuffer(); - final String [] sflags = { - "FLEXIBLE", "STOPBIT", "NEXTBIT", "TAILS", - "WEIGHTED", "LARGE_DICTIONARIES" }; - - StringBuffer res = new StringBuffer(); - - for (int i=0;i<aflags.length;i++) - { - if ((flags & aflags[i])!=0) - { + for (int i = 0; i < aflags.length; i++) { + if ((flags & aflags[i]) != 0) { flags = flags & ~aflags[i]; - if (res.length()>0) + if (res.length() > 0) { res.append(','); - res.append( sflags[i] ); + } + res.append(sflags[i]); } } - if (flags != 0) - { - if (res.length() > 0) + if (flags != 0) { + if (res.length() > 0) { res.append(' '); + } res.append("(Some flags were not recognized: " + Integer.toBinaryString(flags) + ")"); } @@ -51,49 +49,35 @@ /** * Returns a version number for a set of flags. - * In the future, this method should throw an exception if an illegal combination - * of flags is used. */ - protected static byte getVersion( int flags ) + static byte getVersion(int flags) { byte version; - if ( (flags & FSA.FSA_FLEXIBLE) != 0) - { - if ((flags & FSA.FSA_STOPBIT) != 0) - { - if ((flags & FSA.FSA_NEXTBIT) != 0) - { - if ((flags & FSA.FSA_TAILS) != 0) - { + if ((flags & FSA.FSA_FLEXIBLE) != 0) { + if ((flags & FSA.FSA_STOPBIT) != 0) { + if ((flags & FSA.FSA_NEXTBIT) != 0) { + if ((flags & FSA.FSA_TAILS) != 0) { version = 7; - } - else - { + } else { if ((flags & FSA.FSA_WEIGHTED) != 0) version = 8; else version = 5; } - } - else - { + } else { if ((flags & FSA.FSA_TAILS) != 0) version = 6; else version = 4; } - } - else - { + } else { if ((flags & FSA.FSA_NEXTBIT) != 0) version = 2; else version = 1; } - } - else - { + } else { if ((flags & FSA.FSA_LARGE_DICTIONARIES) != 0) version = (byte) 0x80; else @@ -108,7 +92,7 @@ * Returns flags integer for a given version number. * @throws RuntimeException if the version number is not recognized. */ - protected static int getFlags(int version) + static int getFlags(int version) { int flags; @@ -119,7 +103,7 @@ case 1: flags = FSA.FSA_FLEXIBLE; break; case 2: flags = FSA.FSA_FLEXIBLE | FSA.FSA_NEXTBIT; break; case 4: flags = FSA.FSA_FLEXIBLE | FSA.FSA_STOPBIT; break; - case 5: flags = FSA.FSA_FLEXIBLE | FSA.FSA_STOPBIT | FSA.FSA_NEXTBIT; break; + case FSA.VERSION_5: flags = FSA.FSA_FLEXIBLE | FSA.FSA_STOPBIT | FSA.FSA_NEXTBIT; break; case 6: flags = FSA.FSA_FLEXIBLE | FSA.FSA_STOPBIT | FSA.FSA_TAILS; break; case 7: flags = FSA.FSA_FLEXIBLE | FSA.FSA_STOPBIT | FSA.FSA_NEXTBIT | FSA.FSA_TAILS; break; default: @@ -128,4 +112,14 @@ return flags; } + + /** + * Expand a byte array and copy the contents from the previous array to + * the new one. + */ + public static byte[] resizeByteBuffer(byte [] buffer, int newSize) { + final byte [] newBuffer = new byte [newSize]; + System.arraycopy(buffer, 0, newBuffer, 0, Math.min(buffer.length, newBuffer.length)); + return newBuffer; + } } \ No newline at end of file Modified: lametyzator/trunk/src/com/dawidweiss/fsa/FSAMatch.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSAMatch.java 2006-09-26 21:40:50 UTC (rev 23) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSAMatch.java 2006-09-27 19:13:43 UTC (rev 24) @@ -1,7 +1,7 @@ package com.dawidweiss.fsa; /** - * Match result is returned as an object of this class. + * A result returned from {@link FSATraversalHelper#matchSequence(byte[], com.dawidweiss.fsa.FSA.Node)}. */ public final class FSAMatch { @@ -11,23 +11,34 @@ public static final int PREFIX_FOUND = 3; public static final int PREMATURE_WORD_END_FOUND = 4; - private int matchResult; - private int mismatchAtIndex; - private FSA.Node mismatchAtNode; + private int matchResult; + private int mismatchAtIndex; + private FSA.Node mismatchAtNode; - protected FSAMatch( int result, int mismatchAtIndex, FSA.Node mismatchAtNode ) + protected FSAMatch(int result, int mismatchAtIndex, FSA.Node mismatchAtNode) { - this.matchResult = result; + this.matchResult = result; this.mismatchAtIndex = mismatchAtIndex; - this.mismatchAtNode = mismatchAtNode; + this.mismatchAtNode = mismatchAtNode; } - protected FSAMatch( int result ) + protected FSAMatch(final int result) { - this.matchResult = result; + this.matchResult = result; } - public int getMatchResult() { return matchResult; } - public int getMismatchIndex() { return mismatchAtIndex; } - public FSA.Node getMismatchNode() { return mismatchAtNode; } + public int getMatchResult() + { + return matchResult; + } + + public int getMismatchIndex() + { + return mismatchAtIndex; + } + + public FSA.Node getMismatchNode() + { + return mismatchAtNode; + } } Copied: lametyzator/trunk/src/com/dawidweiss/fsa/FSATraversalHelper.java (from rev 22, lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java) =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSATraversalHelper.java (rev 0) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSATraversalHelper.java 2006-09-27 19:13:43 UTC (rev 24) @@ -0,0 +1,110 @@ + +package com.dawidweiss.fsa; + +import java.util.Iterator; + +/** + * This class implements some common match/ traverse/ find operations on a generic FSA. + * + * <p>Optimized implementations may be provided my specific versions of FSA, therefore objects + * of this class should be instantiated via {@link FSA#getTraversalHelper()}. + */ +public class FSATraversalHelper +{ + /** + * Creates an instance from within the package. + */ + FSATraversalHelper() + { + // empty + } + + + /** + * Returns an {@link Iterator} of all subsequences available from the given node to + * all reachable final states. + */ + public FSAFinalStatesIterator getAllSubsequences(final FSA.Node node) + { + if (node == null) { + throw new IllegalArgumentException("Node cannot be null."); + } + + // Create a custom iterator in the FSA + return new FSAFinalStatesIterator(node); + } + + + /** + * Finds a matching path in the dictionary for a given sequence of labels. + * Several return values are possible: + * <ol> + * <li>{@link FSAMatch#EXACT_MATCH} - The sequence ends exactly on the final node. A + * match has been found. + * + * <li>{@link FSAMatch#PREFIX_FOUND} - The sequence ends on an intermediate + * automaton node. The sequence is therefore + * a prefix of at least one other sequence stored in the dictionary. The result + * Match will contain an index of the first character in the input sequence not present + * in the dictionary and a pointer to the FSA.Node where mismatch occurred. + * + * <li>{@link FSAMatch#PREMATURE_PATH_END_FOUND} - Dictionary's path ends before the sequence. + * It means a prefix of the input sequence + * is stored in the dictionary. (i.e. an empty sequence is a prefix of all other + * sequences). The result Match will contain an index of the first character + * not present in the dictionary. + * + * <li>{@link FSAMatch#PREMATURE_WORD_END_FOUND} - The input sequence ends on an intermediate + * automaton node. This is a special case of {@link FSAMatch#PREFIX_FOUND}. A Node where the mismatch + * (lack of input sequence's characters) occurred is returned in Match. + * </ol> + */ + public FSAMatch matchSequence(byte [] sequence, FSA fsa) + { + return matchSequence(sequence, fsa.getStartNode()); + } + + + /** + * Finds a matching path in the dictionary for a given sequence of labels, + * starting from some internal dictionary's node. + * + * @see #matchSequence(byte [], FSA.Node) + */ + public FSAMatch matchSequence(byte [] sequence, FSA.Node node) + { + FSA.Arc arc; + + if (node == null) { + return new FSAMatch(FSAMatch.NO_MATCH); + } + + for (int i = 0; i < sequence.length; i++) { + arc = node.getArcLabelledWith(sequence[i]); + if (arc != null) { + if (arc.isFinal()) { + if (i + 1 == sequence.length) { + // the word has been found (exact match). + return new FSAMatch(FSAMatch.EXACT_MATCH ); + } else { + // a prefix of the word has been found + // (there are still characters in the word, but the path is over) + return new FSAMatch(FSAMatch.PREMATURE_PATH_END_FOUND, i + 1, null); + } + } else { + // make a transition along the arc. + node = arc.getDestinationNode(); + } + } else { + // the label was not found. i.e. there possibly are prefixes + // of the word in the dictionary, but an exact match doesn't exist. + // [an empty string is also considered a prefix!] + return new FSAMatch(FSAMatch.PREFIX_FOUND, i, node); + } + } + + // the word is a prefix of some other sequence(s) present in the dictionary. + return new FSAMatch(FSAMatch.PREMATURE_WORD_END_FOUND, 0, node); + } + +} \ No newline at end of file Modified: lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java 2006-09-26 21:40:50 UTC (rev 23) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSATraverseHelper.java 2006-09-27 19:13:43 UTC (rev 24) @@ -1,230 +1,11 @@ package com.dawidweiss.fsa; -import java.util.Iterator; -import java.util.LinkedList; -import java.util.NoSuchElementException; /** - * FSATraverseHelper implements some common match/ traverse/ find operations on a generic FSA. - * Optimized implementations may be provided my specific versions of FSA, therefore objects - * of this class shouls ALWAYS be instantiated via FSA.getTraverseHelper + * @deprecated Use {@link FSATraversalHelper}. */ -public final class FSATraverseHelper +public final class FSATraverseHelper extends FSATraversalHelper { - /** - * Creates a traverse object for some generic FSA automaton - */ - protected FSATraverseHelper() - { - // Input argument currently unused. - } - - - /** - * Returns an Iterator of all subsequences available from the given node to - * all reachable final states. The iterator returns byte arrays. - * - * The iterator operates on a stack and traverses the FSA on-demand. - * - * Please note this object is NOT synchronized. Synchronize externally if needed. - * - * @throws NullPointerException if node parameter is null. - */ - public Iterator getAllSubsequences( final FSA.Node node ) - { - if (node==null) - throw new NullPointerException("Node cannot be null."); - - // Create a custom iterator in the FSA - final Iterator iterator; - iterator = new Iterator() { - final LinkedList nodes = new LinkedList(); - final LinkedList arcs = new LinkedList(); - final StringBuffer buffer = new StringBuffer( ); - - // static initializer. - { // initialize instance. push initial Node to stack. - if (node.getFirstArc() != null) - { - nodes.add(node); - arcs.add(node.getFirstArc()); - } - } - - // A cache for the next element in the FSA - private Object nextElement = null; - - /** Returns true if there are still elements in this iterator. */ - public boolean hasNext() - { - if (nextElement==null) { - nextElement = advance(); - } - return nextElement!=null; - } - - /** - * Returns the next element. - * @throws NoSuchElementException If this method is called after hasNext returned - * false. - */ - public Object next() - { - if (nextElement!=null) - { - Object cache = nextElement; - nextElement = null; - return cache; - } - else - { - Object cache = advance(); - if (cache==null) - throw new NoSuchElementException("No next element to traverse."); - return cache; - } - } - - /** advance to the next final state (and build a new sentence) */ - protected Object advance() - { - if (arcs.isEmpty()) - return null; - - while (!arcs.isEmpty()) - { - final FSA.Arc arc = ((FSA.Arc)arcs.get(0)); - - if (arc == null) - { - // remove the current node from the queue - nodes.remove(0); - arcs.remove(0); - continue; - } - - arcs.set(0, ((FSA.Node)nodes.get(0)).getNextArc(arc)) ; - - if (buffer.length() < nodes.size() ) - { - buffer.setLength( nodes.size() ); - } - buffer.setCharAt( nodes.size()-1, (char) arc.getLabel()); - - if (arc.pointsToFinalNode()) - { - // a full sequence has been found. - final char [] chars = new char [ nodes.size() ]; - buffer.getChars(0, nodes.size(), chars, 0); - final byte [] sequence = new byte [ nodes.size() ]; - for (int i=chars.length-1;i>=0;i--) - sequence[i] = (byte)(chars[i] & 0xff); - return sequence; - } - else - { - // continue drilling down. - nodes.add(0, arc.getDestinationNode()); - arcs.add(0, arc.getDestinationNode().getFirstArc()); - continue; - } - } - return null; - } - - public void remove() - { - throw new UnsupportedOperationException("Cannot remove nodes of a FSA. Iterator is always read-only."); - } - }; - - return iterator; - } - - - /** - * Finds a matching path in the dictionary for a given sequence of labels. - * There are several cases possible: - * <ol> - * <li><code>EXACT_MATCH</code>The sequence ends exactly on the final node. A - * match has been found. - * - * <li><code>PREFIX_FOUND</code>The sequence ends on an intermediate - * automaton node. The sequence is therefore - * a prefix of at least one other sequence stored in the dictionary. The result - * Match will contain an index of the first character in the input sequence not present - * in the dictionary and a pointer to the FSA.Node where mismatch occurred. - * - * <li><code>PREMATURE_PATH_END_FOUND</code>Dictionary's path ends before the sequence. - * It means a prefix of the input sequence - * is stored in the dictionary. (i.e. an empty sequence is a prefix of all other - * sequences). The result Match will contain an index of the first character - * not present in the dictionary. - * - * <li><code>PREMATURE_WORD_END_FOUND</code> - * The input sequence ends on an intermediate automaton node. This is a special - * case of PREFIX_FOUND. A Node where the mismatch (lack of input sequence's characters) - * occurred is returned in Match. - * </ol> - */ - public FSAMatch matchSequence( byte [] word, FSA fsa ) - { - return matchSequence( word, fsa.getStartNode() ); - } - - - /** - * Finds a matching path in the dictionary for a given sequence of labels, - * starting from some internal dictionary's node. - * - * Please refer to documentation of the <code>matchSequence(byte [] word, FSA.Node node)</code> method. - * - * @see #matchSequence(byte [], FSA.Node) - */ - public FSAMatch matchSequence( byte [] word, FSA.Node node ) - { - FSA.Arc arc; - - if (node == null) - return new FSAMatch( FSAMatch.NO_MATCH ); - - for (int i=0;i<word.length;i++) - { - arc = node.getArcLabelledWith( word[i] ); - if (arc != null) - { - if (arc.pointsToFinalNode()) - { - if (i+1==word.length) - { - // the word has been found (exact match). - return new FSAMatch( FSAMatch.EXACT_MATCH ); - } - else - { - // a prefix of the word has been found - // (there are still characters in the word, but the path is over) - return new FSAMatch( FSAMatch.PREMATURE_PATH_END_FOUND, i+1, null ); - } - } - else - { - // make a transition along the arc. - node = arc.getDestinationNode(); - } - } - else - { - // the label was not found. i.e. there possibly are prefixes - // of the word in the dictionary, but an exact match doesn't exist. - // [an empty string is also considered a prefix!] - return new FSAMatch( FSAMatch.PREFIX_FOUND, i, node ); - } - } - - // the word is a prefix of some other sequence(s) present in the dictionary. - return new FSAMatch( FSAMatch.PREMATURE_WORD_END_FOUND, 0, node ); - } - + } \ No newline at end of file Modified: lametyzator/trunk/src/com/dawidweiss/fsa/FSAVer5Impl.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/FSAVer5Impl.java 2006-09-26 21:40:50 UTC (rev 23) +++ lametyzator/trunk/src/com/dawidweiss/fsa/FSAVer5Impl.java 2006-09-27 19:13:43 UTC (rev 24) @@ -10,8 +10,9 @@ * FSA (Finite State Automaton) dictionary traversal implementation * for version 5 of the FSA automaton. * - * Version 5 indicates the dictionary was built with these flags: - * FSA_FLEXIBLE, FSA_STOPBIT and FSA_NEXTBIT. The internal representation + * <p>Version 5 indicates the dictionary was built with these flags: + * {@link FSA#FSA_FLEXIBLE}, {@link FSA#FSA_STOPBIT} and {@link FSA#FSA_NEXTBIT}. + * The internal representation * of the FSA must therefore follow this description (please note this * format describes only a single transition (arc), not the entire dictionary file). * <pre> @@ -45,7 +46,7 @@ * gtl+1 (gtl = gotoLength) * </pre> * - * The traversal of such FSA could be made extremely fast using pointers only (or integer + * <p>The traversal of such FSA could be made extremely fast using pointers only (or integer * indices over a byte array in case of Java). However, for the sake of clarity, this class * uses explicit Node/ Arc objects. * @@ -54,170 +55,205 @@ public final class FSAVer5Impl extends FSA { - /** The flag used to indicate that an arc is the last one of node's list and the following one - * will start another node. + /** + * Bitmask indicating that an arc is the last one of the node's list and the following one + * belongs to another node. */ - protected static final int FLAG_STOPBIT = 0x02; + private static final int BITMASK_LASTARC = 1 << 1; - /** A size, in bytes, of a single arc */ - protected int arcSize; + /** + * Bitmask indicating that an arc corresponds to the last character of a sequence available + * when building the automaton. + */ + private static final int BITMASK_FINALARC = 1 << 0; - /** An offset in the arc structure, where 'address' field begins. */ - protected int gotoOffset; + /** + * Bitmask indicating that the next node follows this arc in the compressed automaton + * structure. + */ + private static final int BITMASK_NEXTBIT = 1 << 2; - /** An array of bytes holding the "packed" representation of this automaton. - * PLease see the documentation of this class for a more information on - * how this structure is organized. + /** + * Size of a single arc (in bytes). */ - protected byte [] arcs; + protected int arcSize; + /** + * An offset in the arc structure, where the address field begins. For this + * version of the automaton, this is a constant value. + */ + protected final static int gotoOffset = 1; - /** An arc (a labelled transition between two nodes). - * - * An arc has an explicit representation in the transitions array, a pointer - * to that representation is stored in this class. - * - * This class is public, so that it can be used directly without unnecessary - * runtime-typing and casting. This should be an extreme case when performance - * counts, though. Use interfaces when portability is the objective. + /** + * An array of bytes with the internal representation of the automaton. + * Please see the documentation of this class for more information on + * how this structure is organized. */ + protected byte [] arcs; + + + /** + * An arc in version 5 of the automaton structure. + */ private final class Arc implements FSA.Arc { /** An index in the dictionary where this arc begins. */ - private int offset; + private final int offset; - /** Creates an arc, whose representation starts at <code>offset</code> in the arcs array. + /** + * Creates an arc, whose representation starts at <code>offset</code> in the arcs array. */ - public Arc( int offset ) + public Arc(final int offset) { this.offset = offset; } - /** Returns the destination node, pointed to by this arc. - * If this arc points to a final node, null is returned. + /** + * Returns the destination node, pointed to by this arc. */ public FSA.Node getDestinationNode() { - if (this.pointsToFinalNode()) - return null; + final int nodeOffset = getDestinationNodeOffset(); + if (0 == nodeOffset) { + throw new RuntimeException("This is a terminal arc [" + offset + "]"); + } + // Return a new object, which is needed simply to hold the value // of a pointer in the arcs array. - return new Node( getDestinationNodeOffset() ); + return new Node(nodeOffset); } /** Returns the label of this arc. */ public byte getLabel() { // first byte of arc's representation is its label. - return arcs[ offset ]; + return arcs[offset]; } - /** Returns true if the destination node is a final node (final state of the FSA). */ - public boolean pointsToFinalNode() + /** + * {@inheritDoc} + */ + public boolean isLast() { - return (arcs[ offset + gotoOffset] & 0x01) != 0; + return (arcs[offset + gotoOffset] & BITMASK_LASTARC) != 0; } - /** Returns true if this arc is the last arc of some node's representation */ - protected boolean isLast() + /** + * {@inheritDoc} + */ + public boolean isFinal() { - return (arcs[ offset + gotoOffset] & 0x02) != 0; + return (arcs[offset + gotoOffset] & BITMASK_FINALARC) != 0; } + /** + * {@inheritDoc} + */ + public boolean isTerminal() { + return (0 == getDestinationNodeOffset()); + } + + /** + * @deprecated Use {@link #isFinal()} instead. + */ + public final boolean pointsToFinalNode() + { + return isFinal(); + } + /** Returns the address of the node pointed to by this arc. */ private int getDestinationNodeOffset() { - if ((arcs[ offset + gotoOffset ] & 0x04) != 0) - { + if ((arcs[offset + gotoOffset] & BITMASK_NEXTBIT) != 0) { /* the destination node follows this arc in the array */ return offset + gotoOffset + 1; - } - else - { + } else { /* the destination node address has to be extracted from the arc's goto field. */ - return gotoFieldToOffset( arcs, offset + gotoOffset, gotoLength ) >>> 3; + return gotoFieldToOffset(offset + gotoOffset, gotoLength) >>> 3; } } } - /** A node (a collection of outgoing arcs). + /** + * A node in version 5 of the automaton structure. * - * A node has an implicit representation - it is stored as a consecutive - * vector of arcs. The last arc of the node has a special bit set to 1. - * - * This class is public, so that it can be used directly without unnecessary - * runtime-typing and casting. This should be an extreme case when performance - * counts, though. Use interfaces when portability is the objective. + * @see FSA.Node */ - private final class Node - extends FSAAbstractNode - { - /** The offset of this node's representation in the arcs array */ - private int offset; + private final class Node implements FSA.Node { + /** + * The offset of this node's representation in the arcs array + */ + private final int offset; - /** Creates a node, whose representation starts at <code>offset</code> in - * the arcs array. + /** + * Creates a node at the given offset (first arc's). */ - public Node( int offset ) + public Node(final int offset) { this.offset = offset; } - /** Returns the first outgoing arc of this node. - * Theoretically, this method should ALWAYS return at least one arc. - * (final nodes have no representation). + /** + * {@inheritDoc} */ public FSA.Arc getFirstArc() { - return new Arc( offset ); + return new Arc(offset); } - /** Returns a subsequent arc of this node. null is returned when - * no more arcs are available. - * - * This method will not verify whether the "input" arc really - * belongs to this node. Caution is advised. + /** + * {@inheritDoc} */ - public FSA.Arc getNextArc( FSA.Arc arc ) + public FSA.Arc getNextArc(FSA.Arc arc) { - Arc myArc = (Arc) arc; + final Arc myArc = (Arc) arc; if (myArc.isLast()) return null; else - { - return new Arc( myArc.offset + arcSize ); + return new Arc(myArc.offset + arcSize); + } + + /** + * Returns an arc with a given label, if it exists in this node. + */ + public final FSA.Arc getArcLabelledWith(byte label) + { + FSA.Arc arc; + for (arc = getFirstArc(); arc != null; arc = getNextArc(arc)) { + if (arc.getLabel() == label) + return arc; } + + // arc labelled with "label" not found. + return null; } } /** - * Returns the number of arcs in this automaton + * Returns the number of arcs in this automaton. + * This method performs a full scan of all arcs in this automaton. */ public int getNumberOfArcs() { - FSA.Node startNode = getStartNode(); + final FSA.Node startNode = getStartNode(); + FSAVer5Impl.Arc arc = (FSAVer5Impl.Arc) startNode.getFirstArc(); - + int arcOffset = arc.offset; int arcsNumber = 0; - - while (arc.offset < arcs.length) - { + while (arcOffset < arcs.length) { arcsNumber++; - // next arc. - if ((arcs[ arc.offset + gotoOffset ] & 0x04) != 0) - { + // go to next arc. + if ((arcs[arcOffset + gotoOffset] & BITMASK_NEXTBIT) != 0) { /* the next arc is right after this one. */ - arc = new Arc( arc.offset + gotoOffset + 1); - } - else - { + arcOffset = arcOffset + gotoOffset + 1; + } else { /* the destination node address has to be extracted from the arc's goto field. */ - arc = new Arc( arc.offset + gotoOffset + gotoLength ); + arcOffset = arcOffset + gotoOffset + gotoLength; } } @@ -225,18 +261,17 @@ } - /** Returns the number of nodes in this automaton. - * This method is not efficient in this representation of an automaton. It takes - * O(N), where N is the number of arcs to calculate the number of nodes. + /** + * Returns the number of nodes in this automaton. + * This method performs a full scan of all arcs in this automaton. */ public int getNumberOfNodes() { int offset = gotoOffset; int nodes = 0; - while (offset < arcs.length) - { + while (offset < arcs.length) { // This arc marks an end of the list of node's arrays. - if ( (arcs[offset] & FLAG_STOPBIT) != 0) + if ((arcs[offset] & BITMASK_LASTARC) != 0) nodes++; offset += arcSize; } @@ -251,61 +286,56 @@ public FSAVer5Impl(InputStream fsaStream, String dictionaryEncoding) throws IOException { - super( fsaStream, dictionaryEncoding ); + super(fsaStream, dictionaryEncoding); } - /** Returns the start node of this automaton. - * May return null if the start node is also an end node. + /** + * Returns the start node of this automaton. + * May return <code>null</code> if the start node + * is also an end node. */ public FSA.Node getStartNode() { - return new Node( arcSize ).getFirstArc().getDestinationNode(); + return new Node(arcSize).getFirstArc().getDestinationNode(); } - /* *************************************** */ - /* **** PROTECTED AND PRIVATE METHODS **** */ - /* *************************************** */ - - - /** Reads a FSA from the stream. - * Throws an exception if magic number is not found. - * - * @throws IOException - * @throws ClassNotFoundException If the magic number doesn't match. + /** + * {@inheritDoc} */ protected void readFromStream(DataInput in, long fileSize) throws IOException { - super.readFromStream( in, fileSize ); + super.readFromStream(in, fileSize); - // check if we support such version of the automata. - if (version!=5) + // Check if we support such version of the automata. + if (version != FSA.VERSION_5) { throw new IOException("Cannot read FSA in version " + version - + " (built with flags: " + FSAHelpers.flagsToString( FSAHelpers.getFlags( version ) ) + "). " - + "Class " + this.getClass().getName() - + " supports version 5 only (" + FSAHelpers.flagsToString( FSAHelpers.getFlags( 5 ) ) + ")."); + + " (built with flags: " + FSAHelpers.flagsToString(FSAHelpers.getFlags( version )) + ")." + + " Class " + this.getClass().getName() + + " supports version " + FSA.VERSION_5 + " only (" + FSAHelpers.flagsToString(FSAHelpers.getFlags(FSA.VERSION_5)) + ")."); + } - // read transitions data. + // Read transitions data. gotoLength = (byte) (gotoLength & 0x0f); - arcSize = gotoLength + 1; - int numberOfArcs = (int) fileSize - /* header size */ 8; + arcSize = gotoLength + 1; + final int numberOfArcs = (int) fileSize - /* header size */ 8; arcs = new byte [ numberOfArcs ]; in.readFully( arcs ); - - // This is a constant value for this type of encoding. - gotoOffset = 1; } - /** Returns an integer offset from a 'packed' representation */ - protected static int gotoFieldToOffset(byte [] bytes, int start, int n) + /** + * Returns an integer offset from bitpacked representation. + */ + protected final int gotoFieldToOffset(final int start, final int n) { int r = 0; for (int i = n - 1; i >= 0; --i) { - r <<= 8; r = r | ((int)bytes[start + i] & 0xff); + r <<= 8; + r = r | (arcs[start + i] & 0xff); } return r; } Modified: lametyzator/trunk/src/com/dawidweiss/fsa/util/FSADump.java =================================================================== --- lametyzator/trunk/src/com/dawidweiss/fsa/util/FSADump.java 2006-09-26 21:40:50 UTC (rev 23) +++ lametyzator/trunk/src/com/dawidweiss/fsa/util/FSADump.java 2006-09-27 19:13:43 UTC (rev 24) @@ -23,9 +23,9 @@ // The array where all labels on a path from start to final node are collected. // The buffer automatically expands up to MAX_BUFFER_SIZE when an exception // is thrown. - static final int MAX_BUFFER_SIZE = 5000; - static final int BUFFER_INCREMENT = 1000; - static byte [] word = new byte [BUFFER_INCREMENT]; + private static final int MAX_BUFFER_SIZE = 5000; + private static final int BUFFER_INCREMENT = 1000; + private static byte [] word = new byte [BUFFER_INCREMENT]; // The character encoding used for converting labels to unicode. private String encoding; @@ -75,9 +75,9 @@ } } - // dumps the dictionary using standard FSATraverseHelper api. + // dumps the dictionary using standard FSATraversalHelper api. boolean apidump = false; - if (args.length>2) + if (args.length > 2) { if (args[2].equals("apidump")) { @@ -92,15 +92,16 @@ System.err.println("Compiled with flags : " + FSAHelpers.flagsToString(fsa.getFlags()) ); System.err.println("Number of arcs : " + fsa.getNumberOfArcs() ); System.err.println("Number of nodes : " + fsa.getNumberOfNodes() ); + System.err.println("Annotation separator: " + fsa.getAnnotationSeparator()); + System.err.println("Filler character : " + fsa.getFillerCharacter()); - if (apidump==false) - dumpNode( fsa.getStartNode() , 0 ); + if (apidump == false) + dumpNode(fsa.getStartNode() , 0); else { - for (Iterator i=fsa.getTraverseHelper().getAllSubsequences( fsa.getStartNode() ); i.hasNext();) - { - byte [] sequence = (byte []) i.next(); - System.out.println( new String(sequence, encoding) ); + for (Iterator i = fsa.getTraversalHelper().getAllSubsequences( fsa.getStartNode() ); i.hasNext();) { + final byte [] sequence = (byte []) i.next(); + System.out.println(new String(sequence, encoding)); } } @@ -112,53 +113,42 @@ /** Called recursively traverses the automaton. */ - public void dumpNode( FSA.Node node, int depth ) + public void dumpNode(FSA.Node node, int depth) throws UnsupportedEncodingException { FSA.Arc arc = node.getFirstArc(); - do - { - try - { - word[depth] = arc.getLabel(); - } - catch (ArrayIndexOutOfBoundsException e) - { - if (word.length + BUFFER_INCREMENT > MAX_BUFFER_SIZE) - { - System.err.println("Error: Buffer limit of " + MAX_BUFFER_SIZE + " bytes exceeded. A loop in the automaton maybe?"); - System.exit(0); + do { + if (depth >= word.length) { + if (word.length + BUFFER_INCREMENT > MAX_BUFFER_SIZE) { + throw new RuntimeException("Error: Buffer limit of " + MAX_BUFFER_SIZE + " bytes exceeded. A loop in the automaton maybe?"); } - System.err.println("Warning: A path in the automaton exceeded " + word.length + " bytes. Expanding buffer."); - byte [] newbuffer = new byte [ word.length + BUFFER_INCREMENT ]; - System.arraycopy( word, 0, newbuffer, 0, word.length); - word = newbuffer; + word = FSAHelpers.resizeByteBuffer(word, word.length + BUFFER_INCREMENT); - // redo the operation. + // Redo the operation. word[depth] = arc.getLabel(); } - if (arc.pointsToFinalNode()) - { - System.out.println( new String( word, 0, depth+1, encoding ) ); + word[depth] = arc.getLabel(); + + if (arc.isFinal()) { + System.out.println(new String(word, 0, depth + 1, encoding)); } - else - { - dumpNode( arc.getDestinationNode(), depth+1 ); + + if (!arc.isTerminal()) { + dumpNode(arc.getDestinationNode(), depth + 1); } arc = node.getNextArc(arc); - } while (arc!=null); + } while (arc != null); } /** Prints the usage info. */ public void usage(String message) { - if (message != null) - { + if (message != null) { System.err.println("Error: " + message); } Modified: lametyzator/trunk/src/com/dawidweiss/fsa/util/FSAFind.java ===============... [truncated message content] |
From: <daw...@us...> - 2006-09-26 21:44:21
|
Revision: 23 http://svn.sourceforge.net/morfologik/?rev=23&view=rev Author: dawidweiss Date: 2006-09-26 14:40:50 -0700 (Tue, 26 Sep 2006) Log Message: ----------- I fiddled with JPOX (JDO) and Google's AJAX framework. Nothing substantial implemented yet, but I'll go on in this direction -- it'll be attractive for me to inspect some new technologies and at the same time I can implement something practical (let's hope). Added Paths: ----------- morfologik/ morfologik/trunk/ morfologik/trunk/webapp/ morfologik/trunk/webapp/.classpath morfologik/trunk/webapp/.externalToolBuilders/ morfologik/trunk/webapp/.externalToolBuilders/New_Builder.launch morfologik/trunk/webapp/.project morfologik/trunk/webapp/Morfologik-compile.cmd morfologik/trunk/webapp/Morfologik-shell.cmd morfologik/trunk/webapp/Morfologik.launch morfologik/trunk/webapp/build.xml morfologik/trunk/webapp/etc/ morfologik/trunk/webapp/etc/grammar.xml morfologik/trunk/webapp/gwt/ morfologik/trunk/webapp/gwt/about.txt morfologik/trunk/webapp/gwt/applicationCreator.cmd morfologik/trunk/webapp/gwt/gwt-dev-windows.jar morfologik/trunk/webapp/gwt/gwt-ll.dll morfologik/trunk/webapp/gwt/gwt-servlet.jar morfologik/trunk/webapp/gwt/gwt-user.jar morfologik/trunk/webapp/gwt/i18nCreator.cmd morfologik/trunk/webapp/gwt/junitCreator.cmd morfologik/trunk/webapp/gwt/projectCreator.cmd morfologik/trunk/webapp/gwt/swt-win32-3139.dll morfologik/trunk/webapp/lib/ morfologik/trunk/webapp/lib/bcel.jar morfologik/trunk/webapp/lib/jdo2-api-2.0.jar morfologik/trunk/webapp/lib/jpox-1.1.2.jar morfologik/trunk/webapp/lib/jpox-enhancer-1.1.2.jar morfologik/trunk/webapp/lib/jta.jar morfologik/trunk/webapp/lib/junit-4.1.jar morfologik/trunk/webapp/lib/libs.txt morfologik/trunk/webapp/lib/log4j-1.2.13.jar morfologik/trunk/webapp/lib/mysql-connector-java-3.1.10-bin.jar morfologik/trunk/webapp/lib/xercesImpl-2.7.1.jar morfologik/trunk/webapp/src/ morfologik/trunk/webapp/src/net/ morfologik/trunk/webapp/src/net/sourceforge/ morfologik/trunk/webapp/src/net/sourceforge/morfologik/ morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/ morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/Morfologik.gwt.xml morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/client/ morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/client/Morfologik.java morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/ morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/Category.java morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/Category.jdo morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/Rule.java morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/Rule.jdo morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/RuleGroup.java morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/RuleGroup.jdo morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/RuleSet.java morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/RuleSet.jdo morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/model/Token.java morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/public/ morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/public/Morfologik.html morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/server/ morfologik/trunk/webapp/src/net/sourceforge/morfologik/webapp/server/Main.java morfologik/trunk/webapp/test/ morfologik/trunk/webapp/test/jpox-test.properties morfologik/trunk/webapp/test/net/ morfologik/trunk/webapp/test/net/sourceforge/ morfologik/trunk/webapp/test/net/sourceforge/morfologic/ morfologik/trunk/webapp/test/net/sourceforge/morfologic/webapp/ morfologik/trunk/webapp/test/net/sourceforge/morfologic/webapp/model/ morfologik/trunk/webapp/test/net/sourceforge/morfologic/webapp/model/PersistenceTest.java Property changes on: morfologik/trunk/webapp ___________________________________________________________________ Name: svn:ignore + tmp tomcat Added: morfologik/trunk/webapp/.classpath =================================================================== --- morfologik/trunk/webapp/.classpath (rev 0) +++ morfologik/trunk/webapp/.classpath 2006-09-26 21:40:50 UTC (rev 23) @@ -0,0 +1,18 @@ +<?xml version="1.0" encoding="UTF-8"?> +<classpath> + <classpathentry kind="src" path="src"/> + <classpathentry kind="src" path="test"/> + <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> + <classpathentry kind="lib" path="gwt/gwt-user.jar"/> + <classpathentry kind="var" path="JUNIT_HOME/junit.jar"/> + <classpathentry kind="lib" path="lib/bcel.jar"/> + <classpathentry kind="lib" path="lib/jdo2-api-2.0.jar"/> + <classpathentry kind="lib" path="lib/jpox-1.1.2.jar"/> + <classpathentry kind="lib" path="lib/jpox-enhancer-1.1.2.jar"/> + <classpathentry kind="lib" path="lib/jta.jar"/> + <classpathentry kind="lib" path="lib/log4j-1.2.13.jar"/> + <classpathentry kind="lib" path="lib/mysql-connector-java-3.1.10-bin.jar"/> + <classpathentry kind="lib" path="lib/xercesImpl-2.7.1.jar"/> + <classpathentry kind="lib" path="lib/junit-4.1.jar"/> + <classpathentry kind="output" path="tmp/classes"/> +</classpath> Added: morfologik/trunk/webapp/.externalToolBuilders/New_Builder.launch =================================================================== --- morfologik/trunk/webapp/.externalToolBuilders/New_Builder.launch (rev 0) +++ morfologik/trunk/webapp/.externalToolBuilders/New_Builder.launch 2006-09-26 21:40:50 UTC (rev 23) @@ -0,0 +1,26 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.ant.AntBuilderLaunchConfigurationType"> +<booleanAttribute key="org.eclipse.debug.ui.ATTR_LAUNCH_IN_BACKGROUND" value="false"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="true"/> +<booleanAttribute key="org.eclipse.ant.ui.DEFAULT_VM_INSTALL" value="false"/> +<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_AFTER_CLEAN_TARGETS" value="enhance,"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="1"/> +</listAttribute> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_RUN_BUILD_KINDS" value="full,incremental,auto,"/> +<booleanAttribute key="org.eclipse.ant.ui.ATTR_TARGETS_UPDATED" value="true"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_WORKING_DIRECTORY" value="${workspace_loc:/Morfologik-webapp}"/> +<booleanAttribute key="org.eclipse.ui.externaltools.ATTR_TRIGGERS_CONFIGURED" value="true"/> +<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> +<stringAttribute key="org.eclipse.jdt.launching.CLASSPATH_PROVIDER" value="org.eclipse.ant.ui.AntClasspathProvider"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_BUILD_SCOPE" value="${working_set:<?xml version="1.0" encoding="UTF-8"?> <launchConfigurationWorkingSet factoryID="org.eclipse.ui.internal.WorkingSetFactory" label="workingSet" name="workingSet"> <item factoryID="org.eclipse.ui.internal.model.ResourceFactory" path="/Morfologik-webapp/src/net/sourceforge/morfologik/webapp/model" type="2"/> </launchConfigurationWorkingSet>}"/> +<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_MANUAL_TARGETS" value="enhance,"/> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_TOOL_ARGUMENTS" value="-Dbuild.dir=${resource_loc:/Morfologik-webapp/tmp/classes}"/> +<stringAttribute key="org.eclipse.ant.ui.ATTR_ANT_AUTO_TARGETS" value="enhance,"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Morfologik-webapp"/> +<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${project}"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/Morfologik-webapp/build.xml"/> +</listAttribute> +<stringAttribute key="org.eclipse.ui.externaltools.ATTR_LOCATION" value="${workspace_loc:/Morfologik-webapp/build.xml}"/> +</launchConfiguration> Added: morfologik/trunk/webapp/.project =================================================================== --- morfologik/trunk/webapp/.project (rev 0) +++ morfologik/trunk/webapp/.project 2006-09-26 21:40:50 UTC (rev 23) @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="UTF-8"?> +<projectDescription> + <name>Morfologik-webapp</name> + <comment>Morfologik Web application</comment> + <projects> + </projects> + <buildSpec> + <buildCommand> + <name>org.eclipse.jdt.core.javabuilder</name> + <arguments> + </arguments> + </buildCommand> + <buildCommand> + <name>org.eclipse.ui.externaltools.ExternalToolBuilder</name> + <triggers>auto,full,incremental,</triggers> + <arguments> + <dictionary> + <key>LaunchConfigHandle</key> + <value><project>/.externalToolBuilders/New_Builder.launch</value> + </dictionary> + </arguments> + </buildCommand> + </buildSpec> + <natures> + <nature>org.eclipse.jdt.core.javanature</nature> + </natures> +</projectDescription> Added: morfologik/trunk/webapp/Morfologik-compile.cmd =================================================================== --- morfologik/trunk/webapp/Morfologik-compile.cmd (rev 0) +++ morfologik/trunk/webapp/Morfologik-compile.cmd 2006-09-26 21:40:50 UTC (rev 23) @@ -0,0 +1 @@ +@java -cp "%~dp0/src;%~dp0\tmp;%~dp0/gwt/gwt-user.jar;%~dp0/gwt/gwt-dev-windows.jar" com.google.gwt.dev.GWTCompiler -out "%~dp0/tmp/www" %* net.sourceforge.morfologik.webapp.Morfologik \ No newline at end of file Added: morfologik/trunk/webapp/Morfologik-shell.cmd =================================================================== --- morfologik/trunk/webapp/Morfologik-shell.cmd (rev 0) +++ morfologik/trunk/webapp/Morfologik-shell.cmd 2006-09-26 21:40:50 UTC (rev 23) @@ -0,0 +1 @@ +@java -cp "%~dp0/src;%~dp0/tmp/classes;%~dp0/gwt/gwt-user.jar;%~dp0/gwt/gwt-dev-windows.jar" com.google.gwt.dev.GWTShell -out "%~dp0/tmp/www" %* net.sourceforge.morfologik.webapp.Morfologik/Morfologik.html \ No newline at end of file Added: morfologik/trunk/webapp/Morfologik.launch =================================================================== --- morfologik/trunk/webapp/Morfologik.launch (rev 0) +++ morfologik/trunk/webapp/Morfologik.launch 2006-09-26 21:40:50 UTC (rev 23) @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> +<stringAttribute key="org.eclipse.debug.ui.ATTR_CONSOLE_ENCODING" value="UTF-8"/> +<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/> +<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="com.google.gwt.dev.GWTShell"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> +<listEntry value="4"/> +</listAttribute> +<listAttribute key="org.eclipse.jdt.launching.CLASSPATH"> +<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry containerPath="org.eclipse.jdt.launching.JRE_CONTAINER" javaProject="Morfologik" path="1" type="4"/> "/> +<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry path="3" projectName="Morfologik-webapp" type="1"/> "/> +<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry internalArchive="/Morfologik-webapp/gwt/gwt-dev-windows.jar" path="3" type="2"/> "/> +<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry internalArchive="/Morfologik-webapp/gwt/gwt-user.jar" path="3" type="2"/> "/> +<listEntry value="<?xml version="1.0" encoding="UTF-8"?> <runtimeClasspathEntry internalArchive="/Morfologik-webapp/src" path="3" type="2"/> "/> +</listAttribute> +<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-out tmp/www net.sourceforge.morfologik.webapp.Morfologik/Morfologik.html"/> +<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Morfologik-webapp"/> +<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> +<listEntry value="/Morfologik-webapp"/> +</listAttribute> +<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/> +</launchConfiguration> Added: morfologik/trunk/webapp/build.xml =================================================================== --- morfologik/trunk/webapp/build.xml (rev 0) +++ morfologik/trunk/webapp/build.xml 2006-09-26 21:40:50 UTC (rev 23) @@ -0,0 +1,33 @@ +<project default="all"> + + <property name="build.dir" location="tmp/ant" /> + + <path id="classpath"> + <fileset dir="lib" includes="*.jar" /> + <path location="${build.dir}" /> + </path> + + <target name="enhance"> + <taskdef name="jpoxenhancer" classpathref="classpath" classname="org.jpox.enhancer.tools.EnhancerTask" /> + + <jpoxenhancer classpathref="classpath" + dir="${build.dir}" verbose="false" fork="true" failonerror="true"> + </jpoxenhancer> + </target> + + <target name="compile"> + <delete dir="${build.dir}" /> + <mkdir dir="${build.dir}" /> + + <javac destdir="${build.dir}" encoding="UTF-8" failonerror="true" srcdir="src"> + <classpath refid="classpath" /> + </javac> + <copy todir="${build.dir}"> + <fileset dir="src" excludes="**/*.java" /> + </copy> + + <antcall target="enhance" /> + </target> + + <target name="all" depends="compile" /> +</project> \ No newline at end of file Added: morfologik/trunk/webapp/etc/grammar.xml =================================================================== --- morfologik/trunk/webapp/etc/grammar.xml (rev 0) +++ morfologik/trunk/webapp/etc/grammar.xml 2006-09-26 21:40:50 UTC (rev 23) @@ -0,0 +1,1624 @@ +<?xml version="1.0" encoding="utf-8"?><!-- +Copyright (C) 2006 Marcin Miłkowski +$Id: grammar.xml,v 1.45 2006/08/28 21:35:52 milek_pl Exp $ +--> +<rules lang="pl"> + <category name="Typografia"> + <rule id="POMINIECIE" name="(...) → [...]"> + <pattern> + <token>(</token> + <token>.</token> + <token>.</token> + <token>.</token> + <token>)</token> + </pattern> + <message>W języku polskim zwyczaj typograficzny nakazuje trzykropek umieszczać w nawiasie kwadratowym: <suggestion>[...]</suggestion>.</message> + <example type="incorrect">„prawdziwe arcydzieło <marker>(...)</marker> o wprost ogromnej teoretycznej doniosłości</example> + <example type="correct">„prawdziwe arcydzieło [...] o wprost ogromnej teoretycznej doniosłości</example> + </rule> + + </category> + <category name="Błędy odmiany"> + <rule id="TA_KSIAZKA" name="„tą” jako biernik (tę)"> + <pattern> + <token>tą</token> + <token postag="subst:sg:acc:f"/> + </pattern> + <message>W bierniku zaimek „ta” ma formę <suggestion>tę</suggestion>.</message> + <example type="correct">Kupiłem tę książkę za parę groszy.</example> + <example type="incorrect">Kupiłem <marker>tą książkę</marker> za parę groszy.</example> + </rule> + <rule id="KOSCIAMI" name="„kościami” (kośćmi)"> + <pattern mark_from="2"> + <token negate="yes" regexp="yes" inflected="yes">poczciwy|uczciwy</token> + <token negate="yes">z</token> + <token>kościami</token> + </pattern> + <message>Forma „kościami” jest dopuszczalna tylko w związku frazeologicznym „poczciwy, uczciwy z kościami”. W pozostałych wypadkach używamy formy <suggestion>kośćmi</suggestion>.</message> + <example type="correct">Cezar bawił się kośćmi legionistów nad Rubikonem.</example> + <example type="incorrect">Cezar bawił się <marker>kościami</marker> legionistów nad Rubikonem.</example> + <example type="correct">Zdzichu jest człowiekiem poczciwym z kościami.</example> + </rule> + <rule id="KONIAMI" name="„koniami” (końmi)"> + <pattern mark_from="1"> + <token negate="yes">starymi</token> + <token>koniami</token> + </pattern> + <message>Forma „koniami” jest używana tylko w znaczeniu „kolega”, „przyjaciel” („stary koń”), natomiast mówiąc o zwierzętach używamy formy <suggestion>końmi</suggestion>.</message> + <example type="correct">Szejkowie uwielbiają handlować końmi.</example> + <example type="correct">My ze Zdzichem jesteśmy takimi starymi koniami, jak papużki nierozłączki, panie dziejaszku.</example> + <example type="incorrect">Księżna od maleńkości fascynowała się <marker>koniami</marker>.</example> + </rule> + + </category> + + <category name="Błąd składniowy"> + <rule id="PRZYIMEK_RZECZOWNIK_KTORY" name="przyimek + rzeczownik + „który”(przyimek + „który” + rzeczownik)"> + <pattern mark_from="1"> + <token>,</token> + <token postag_regexp="yes" postag="prep:.*"/> + <token postag_regexp="yes" postag="subst:.*"><exception regexp="yes">pomocą|podstawie|mocy|braku|razie</exception></token> + <token inflected="yes" regexp="yes">który|jaki</token> + </pattern> + <message>Ten szyk wyrazów jest błędny. Poprawnie: <suggestion>\2 \4 \3</suggestion>.</message> + <example type="incorrect">Zesłanie, <marker>w czasie którego</marker> musiał imać się wielu prac, było mordęgą.</example> + <example type="correct">Zesłanie, <marker>w którego czasie</marker> musiał imać się wielu prac, było mordęgą.</example> + <example type="correct">To jest ustawa, na podstawie której skazano zbrodniarza.</example> + </rule> + <rule id="STOPIEN_WYZSZY" name="Opisowa forma stopnia wyższego (zamiast prostej)"> + <pattern mark_from="1"> + <token negate="yes">tym</token> + <token>bardziej</token> + <token inflected="yes" regexp="yes">brzydki|cichy|ciekawy|ciężki|daleki|długi|dobry|dokładny|duży|dziwny|głęboki|głośny|gruby|grzeczny|korzystny|koszmarny|lekki|luźny|łagodny|łatwy|miły|młody|mocny|okropny|piękny|potworny|prosty|silny|słaby|stary|trwały|ważny|wąski|wolny|wstrętny|wytrwały|zimny|zły|znaczny</token> + </pattern> + <message>Ten przymiotnik stopniuje się bez wyrazu „bardziej”.</message> + <example type="incorrect"><marker>Bardziej ważny</marker> jest dla mnie ten fragment.</example> + <example type="incorrect">Jest to wynik <marker>bardziej dobry</marker>.</example> + <example type="incorrect">Piotr był <marker>bardziej dokładny</marker>.</example> + <example type="correct">Ważniejszy jest dla mnie ten fragment.</example> + <example type="correct">Tym bardziej ważne jest, abyśmy to pamiętali.</example> + <example type="correct">Piotr był dokładniejszy.</example> + </rule> + + <rule name="„bardziej” i stopień wyższy przymiotnika" id="BARDZIEJ_COMP"> + <pattern> + <token>bardziej</token> + <token postag_regexp="yes" postag="adj.*:comp"/> + </pattern> + <message>Prosty stopień wyższy przymiotnika nie powinien być używany z wyrazem „bardziej”. Wystarczy powiedzieć: <suggestion>\2</suggestion>.</message> + <example type="correct">To jest ważniejsze.</example> + <example type="incorrect">To jest <marker>bardziej ważniejsze</marker>.</example> + </rule> + <rule name="„najbardziej” i stopień wyższy przymiotnika" id="NAJBARDZIEJ_COMP"> + <pattern> + <token>najbardziej</token> + <token postag_regexp="yes" postag="adj.*:comp"/> + </pattern> + <message>Prosty stopień wyższy przymiotnika nie powinien być używany z wyrazem „najbardziej”. Wystarczy powiedzieć: <suggestion>\2</suggestion>.</message> + <example type="correct">To jest ważniejsze.</example> + <example type="incorrect">To jest <marker>najbardziej ważniejsze</marker>.</example> + </rule> + <rule name="„bardziej” i stopień wyższy przymiotnika" id="BARDZIEJ_SUP"> + <pattern> + <token>bardziej</token> + <token postag_regexp="yes" postag="adj.*:sup"/> + </pattern> + <message>Prosty stopień najwyższy przymiotnika nie powinien być używany z wyrazem „bardziej”. Wystarczy powiedzieć: <suggestion>\2</suggestion>.</message> + <example type="correct">To jest ważniejsze.</example> + <example type="incorrect">To jest <marker>bardziej najważniejsze</marker>.</example> + </rule> + <rule name="„najbardziej” i stopień wyższy przymiotnika" id="NAJBARDZIEJ_SUP"> + <pattern> + <token>najbardziej</token> + <token postag_regexp="yes" postag="adj.*:sup"/> + </pattern> + <message>Prosty stopień wyższy przymiotnika nie powinien być używany z wyrazem „najbardziej”. Wystarczy powiedzieć: <suggestion>\2</suggestion>.</message> + <example type="correct">To jest ważniejsze.</example> + <example type="incorrect">To jest <marker>najbardziej najważniejsze</marker>.</example> + </rule> + + <rule name="Błąd związku rzędu: „rozumieć coś pod czymś” (przez coś)" id="ROZUMIEC_POD"> + <pattern mark_from="1"> + <token negate="yes" skip="1">przez</token> + <token inflected="yes" skip="5">rozumieć<exception>przez</exception></token> + <token>pod</token> + </pattern> + <message>Mówimy <suggestion>rozumieć coś przez</suggestion> coś.</message> + <example type="incorrect"><marker>Rozumiał czasem pod</marker> tym pojęciem wolę.</example> + <example type="correct">Kartezjusz rozumiał czasem przez to pojęcie wolę.</example> + <example type="correct">Kartezjusz rozumiał przez to wolę, pod którą podciągał inne pojęcia.</example> + </rule> + + <rule name="„inny jak” (inny niż)" id="INNY_JAK"> + <pattern mark_from="2"> + <token regexp="yes" negate="yes">nie|nic|nikt|któż|kto</token> + <token inflected="yes">inny</token> + <token>jak</token> + </pattern> + <message>Mówimy „inny” <suggestion>niż</suggestion>, a nie „inny jak”.</message> + <example type="correct">Któż inny jak nie on!</example> + <example type="correct">Jarosław jest inny niż wszyscy Kaczyńscy.</example> + <example type="incorrect">Jarosław jest inny <marker>jak</marker> wszyscy Kaczyńscy.</example> + </rule> + + <rule name="„w lato” (w lecie, latem)" id="W_LATO"> + <pattern> + <token>w</token> + <token>lato</token> + </pattern> + <message>Mówimy <suggestion>latem</suggestion>, <suggestion>w lecie</suggestion>, a nie „w lato”.</message> + <example type="correct">W lecie wybieramy się do Danii.</example> + <example type="incorrect"><marker>W lato</marker> wybieramy się do Danii.</example> + </rule> + + +<!-- FIXME: this requires that all POS tags are matches; + current rule syntax doesn't allow that and uses only OR logic + this creates many false alarms on alternative POS readings + + <rulegroup id="PREP_CASUS" name="Przyimki z nieodpowiednimi przypadkami"> + <rule> + <pattern mark_from="1"> + <token postag="prep:gen"/> + <token postag_regexp="yes" postag="subst:.*"><exception postag_regexp="yes" postag=".*gen.*|.*irreg.*"></exception></token> + </pattern> + <message>Ten przyimek jest używany z dopełniaczem.</message> + <example type="correct">Poszliśmy bez niego.</example> + <example type="incorrect">Poszliśmy bez <marker>pieniądze</marker>.</example> + <example type="incorrect">Język jest dla <marker>filozofem</marker> tylko topornym narzędziem.</example> + <example type="incorrect">Przyszedł wreszcie sam do <marker>urzędniczka</marker>.</example> + </rule> + <rule> + <pattern mark_from="1"> + <token postag="prep:dat"/> + <token postag_regexp="yes" postag="subst:.*"><exception postag_regexp="yes" postag=".*dat.*|.*irreg.*"></exception></token> + </pattern> + <message>Ten przyimek jest używany z celownikiem.</message> + <example type="correct">Dzięki tym wysiłkom wszystko się udało.</example> + <example type="incorrect">Dzięki <marker>wysiłki</marker> wszystko się udało.</example> + </rule> + <rule> + <pattern mark_from="1"> + <token postag="prep:nom"/> + <token postag_regexp="yes" postag="subst:.*"><exception postag_regexp="yes" postag=".*nom.*|.*irreg.*"/></token> + </pattern> + <message>Ten przyimek jest używany z mianownikiem.</message> + <example type="correct">Czekamy na pojedynek premier kontra wicepremier.</example> + <example type="incorrect">Czekamy na pojedynek premier kontra <marker>wicepremierowi</marker>.</example> + </rule> + <rule> + <pattern mark_from="1"> + <token postag="prep:inst"/> + <token postag_regexp="yes" postag="subst:.*"><exception postag_regexp="yes" postag=".*inst.*|.*irreg.*"/></token> + </pattern> + <message>Ten przyimek jest używany z narzędnikiem.</message> + <example type="correct">Czekamy na pojedynek między premierem i wicepremierem.</example> + <example type="incorrect">Czekamy na pojedynek między <marker>premier</marker> i wicepremierowi.</example> + </rule> + <rule> + <pattern mark_from="1"> + <token postag="prep:loc"><exception regexp="yes">na|w</exception></token> + <token postag_regexp="yes" postag="subst:.*"><exception postag_regexp="yes" postag=".*loc.*|.*irreg.*"/></token> + </pattern> + <message>Ten przyimek jest używany z miejscownikiem.</message> + <example type="correct">Byłem przy grobie Mickiewicza.</example> + <example type="incorrect">Byłem przy <marker>grobem</marker> Mickiewicza.</example> + <example type="correct">Ma na myśli na przykład Józia.</example> + </rule> + <rule> + <pattern mark_from="1"> + <token postag="prep:acc"/> + <token postag_regexp="yes" postag="subst:.*"><exception postag_regexp="yes" postag=".*acc.*|.*irreg.*"/></token> + </pattern> + <message>Ten przyimek jest używany z biernikiem.</message> + <example type="correct">To wszystko przez kurę.</example> + <example type="incorrect">To wszystko przez <marker>pryszczami</marker>.</example> + </rule> + </rulegroup> +--> + + <rule name="„większy/lepszy jak” (większy/lepszy od/niż)" id="WIEKSZY_JAK"> + <pattern mark_from="1"> + <token inflected="yes" regexp="yes">większy|lepszy</token> + <token>jak</token> + </pattern> + <message>Mówimy „większy/lepszy <suggestion>od</suggestion>”, „większy/lepszy <suggestion>niż</suggestion>”.</message> + <example type="correct">Ten nowy dysk jest większy od starego.</example> + <example type="correct">Ten nowy dysk jest lepszy od starego.</example> + <example type="incorrect">Ten nowy dysk jest większy <marker>jak</marker> stary.</example> + <example type="incorrect">Ten nowy dysk jest lepszy <marker>jak</marker> stary.</example> + </rule> + <rule name="„więcej jak” (więcej od, więcej niż)" id="WIECEJ_JAK"> + <pattern mark_from="1"> + <token>więcej</token> + <token>jak</token> + </pattern> + <message>Mówimy „więcej <suggestion>od</suggestion>”, „więcej <suggestion>niż</suggestion>”.</message> + <example type="correct">Więcej niż kosmetyk!</example> + <example type="incorrect">Więcej <marker>jak</marker> Kosmetyk!</example> + </rule> + + + <rule name="„w gazecie pisze” (było napisane)" id="PISZE"> + <pattern case_sensitive="yes"> + <token regexp="yes" skip="-1">[Nn]a|[Ww]</token> + <token regexp="yes" skip="-1">gazecie|internecie|artykule|plakacie|książce|instukcji|księdze</token> + <token regexp="yes" skip="1">pisze|pisało|stoi|stało</token> + <token>że</token> + </pattern> + <message>Mówimy <suggestion>było napisane</suggestion>, a nie „pisze”.</message> + <example type="correct">W gazecie było napisane, że w Polsce rośnie szczurosałata.</example> + <example type="incorrect"><marker>W gazecie pisało, że</marker> w Polsce rośnie szczurosałata.</example> + </rule> + <rule name="„tam pisze” (tam było napisane)" id="TAM_PISZE"> + <pattern> + <token regexp="yes" skip="3">tam|tutaj|gdzie</token> + <token regexp="yes" skip="1">pisze|pisało|stoi|stało</token> + <token>że</token> + </pattern> + <message>Mówimy <suggestion>było napisane</suggestion>, a nie „pisze”.</message> + <example type="correct">Tam było napisane, że w Polsce rośnie szczurosałata.</example> + <example type="incorrect"><marker>Tam pisało, że</marker> w Polsce rośnie szczurosałata.</example> + </rule> + <rule name="„nie tyle... co” (nie tyle..., ile)" id="NIE_TYLE_CO"> + <pattern> + <token>nie</token> + <token skip="-1">tyle<exception>ile</exception></token> + <token>co</token> + </pattern> + <message>Mówimy <suggestion>nie tyle..., ile...</suggestion>.</message> + <example type="correct">Jestem przekonany, że wielkim nieprzyjacielem prawdy jest nie tyle kłamstwo, ile monotonia.</example> + <example type="correct">Nieprzyjacielem prawdy jest nie tyle kłamstwo, ile monotonia, co wykazały zresztą moje badania.</example> + <example type="incorrect">Takie nadmierne wchłanianie wapnia spowodowane jest <marker>nie tyle przesadnym spożyciem, co</marker> zaburzeniami.</example> + </rule> + + + <rule name="„uznać jakimś” (za jakieś)" id="UZNAC_JAKIMS"> + <pattern mark_from="1"> + <token skip="2" inflected="yes" regexp="yes">uznać|uznawać<exception regexp="yes">za|,|na|przy|między|nad|nade|znad|o|po|w</exception></token> + <token postag_regexp="yes" postag="(adj|subst).*inst.*"/> + </pattern> + <message>Mówi się „uznać <suggestion>za</suggestion> jakieś”.</message> + <example type="correct">Ludwik był uznany za wielkiego aktora</example> + <example type="incorrect">Ludwik był uznawany <marker>wielkim</marker> aktorem.</example> + </rule> + <rule id="ZAINTERESOWANIE_DLA" name="„zainteresowanie dla czego” (czym)"> + <pattern> + <token inflected="yes">zainteresować</token> + <token>dla</token> + <token postag_regexp="yes" postag=".*gen.*"/> + </pattern> + <message>Nie mówi się „zainteresowanie dla czegoś”, lecz <suggestion>zainteresowanie czymś</suggestion>.</message> + <example type="correct">Wyraził żywe zainteresowanie zaplanowaną dyskusją na temat nauczania matematyki.</example> + <example type="incorrect">Wyraził żywe <marker>zainteresowanie dla zaplanowanej</marker> dyskusji na temat nauczania matematyki.</example> + </rule> + <rule id="POLTOREJ" name="„półtorej” + rzeczownik rodzaju męskiego lub nijakiego (półtora)"> + <pattern mark_to="-1"> + <token>półtorej</token> + <token postag="subst:.*:(m[0-9]|n)" postag_regexp="yes"/> + </pattern> + <message>Mówi się <suggestion>półtora</suggestion> kilo, nie „półtorej kilo”.</message> + <example type="correct">Kupiłem półtora litra wódki.</example> + <example type="incorrect">Kupiłem <marker>półtorej</marker> litra wódki.</example> + </rule> + + <rule id="UZYWAC_CO" name="„używać co” (czego)"> + <pattern mark_from="1"> + <token regexp="yes" inflected="yes">używać|użyć</token> + <token postag_regexp="yes" postag="(adj|subst|ppas|pact|ppron|ppron3):.*:(acc|nom\.acc\.voc|nom\.acc):(n|f|f\.n)"><exception postag_regexp="yes" postag=".*gen.*|conj|adv|prep.*"/></token> + </pattern> + <message>Mówi się używać <suggestion>czego</suggestion>, a nie „używać coś”.</message> + <example type="correct">Używam starego żelazka.</example> + <example type="incorrect">Używam <marker>stare</marker> żelazko.</example> + <example type="incorrect">Używam <marker>żelazko</marker>.</example> + <example type="incorrect">Pan poseł używa <marker>słowo</marker> „zlecenie”.</example> + <example type="correct">To żelazko jest używane przez królową angielską.</example> + <example type="correct">To żelazko było używane jak dawniej.</example> + <example type="correct">Używają one starych żelazek.</example> + <example type="correct">Używają głównie starych żelazek.</example> + <example type="correct">Termin został użyty raz.</example> + </rule> + + <rule name="„zarówno... i” („zarówno... jak”)" id="ZAROWNO_I"> + <pattern> + <token skip="-1">zarówno<exception>jak</exception></token> + <token skip="-1">i</token> + </pattern> + <message>Po „zarówno” piszemy <suggestion>jak i</suggestion>.</message> + <example type="correct">Wiążą się z tym zarówno zyski, jak i zalety.</example> + <example type="incorrect">Wiążą się z tym <marker>zarówno zyski i</marker> zalety.</example> + <!-- example type="correct">Wiążą się z tym zarówno zyski i zalety, jak i pewne wady.</example --> + </rule> + + <rule name="„czym... tym” (im... tym)" id="CZYM_TYM"> + <pattern> + <token skip="-1">czym</token> + <token postag="(adj|adv).*" postag_regexp="yes" skip="-1"/> + <token>tym</token> + <token postag="(adj|adv).*" postag_regexp="yes"/> + </pattern> + <message>Mówimy <suggestion>Im..., tym</suggestion>.</message> + <example type="correct">Im większa, tym lepiej.</example> + <example type="incorrect"><marker>Czym większa, tym lepiej</marker>.</example> + </rule> + </category> + <category name="Błąd leksykalny"> + <rule name="„w pośrodku” (pośrodku)" id="W_POSRODKU"> + <pattern> + <token>w</token> + <token>pośrodku</token> + </pattern> + <message>Wyrażenie „w pośrodku” jest przestarzałe i obecnie niepoprawne. Używa się wyrażenia <suggestion>pośrodku</suggestion>.</message> + <example type="incorrect"><marker>W pośrodku</marker> rynku stoi studnia.</example> + <example type="correct">Na środku rynku stoi studnia.</example> + </rule> + + + <rule name="„iluśletnia rocznica” (któraś)" id="LETNIA_ROCZNICA"> + <pattern mark_to="-1"> + <token regexp="yes">.*letni.*</token> + <token inflected="yes">rocznica</token> + </pattern> + <message>Rocznica jest któraś, a nie iluśletnia, np. „piąta rocznica”.</message> + <example type="correct">Dzisiaj mija piąta rocznica zwycięstwa nad Malezją w elektrycznych bierkach pod wodą.</example> + <example type="incorrect">Dzisiaj mija <marker>pięcioletnia</marker> rocznica zwycięstwa nad Malezją w elektrycznych bierkach pod wodą.</example> + <example type="incorrect">Dzisiaj mija <marker>5-letnia</marker> rocznica zwycięstwa nad Malezją w elektrycznych bierkach pod wodą.</example> + </rule> + + <rule name="„iluśletni jubileusz” (któryś)" id="LETNI_JUBILEUSZ"> + <pattern mark_to="-1"> + <token regexp="yes">.*letni.*</token> + <token inflected="yes">jubileusz</token> + </pattern> + <message>Jubileusz jest któryś i nie ma sam wielu lat, np. „piąty jubileusz”.</message> + <example type="correct">Szczecińskie Spotkania z Piosenką Religijną będą obchodziły dwudziesty jubileusz.</example> + <example type="incorrect">Szczecińskie Spotkania z Piosenką Religijną będą obchodziły <marker>20-letni</marker> jubileusz.</example> + </rule> + + <rule name="„iluśletnie urodziny” (któreś)" id="LETNIE_URODZINY"> + <pattern mark_to="-1"> + <token regexp="yes">.*letni.*</token> + <token inflected="yes">urodziny</token> + </pattern> + <message>Urodziny są któreś i same nie mają lat, np. „piąte urodziny”.</message> + <example type="correct">Maciuś obchodzi drugie urodziny.</example> + <example type="incorrect">Maciuś obchodzi <marker>2-letnie</marker> urodziny.</example> + </rule> + + <rule name="„czekać za” (na)" id="CZEKAC_ZA"> + <pattern> + <token inflected="yes" skip="4">czekać<exception>na</exception></token> + <token>za</token> + <token postag=".*inst.*" postag_regexp="yes"/> + </pattern> + <message>Mówi się <suggestion>czekać na</suggestion> co, a nie „za czymś”.</message> + <example type="correct">Czekałem dwie godziny na pociąg.</example> + <example type="incorrect"><marker>Czekałem dwie godziny za pociągiem</marker>.</example> + <example type="correct">Czekałem godzinę na pociąg za granicę.</example> + </rule> + + + <rule name="„w przedzie” (na przodzie)" id="W_PRZEDZIE"> + <pattern> + <token>w</token> + <token>przedzie</token> + </pattern> + <message>Mówimy <suggestion>na przodzie</suggestion>, <suggestion>w przodzie</suggestion>.</message> + <example type="correct">Pierwszy sekretarz stał na przodzie pochodu pierwszomajowego.</example> + <example type="incorrect">Pierwszy sekretarz stał <marker>w przedzie</marker> pochodu pierwszomajowego.</example> + </rule> + <rule name="„w ślad za” (w następstwie)" id="W_SLAD_ZA"> + <pattern> + <token>w</token> + <token>ślad</token> + <token>za</token> + </pattern> + <message>Mówimy <suggestion>w następstwie</suggestion> czegoś, <suggestion>wraz z</suggestion> czymś, <suggestion>równocześnie z</suggestion> czymś, a nie „w ślad za czymś”.</message> + <example type="correct">W następstwie tych działań gospodarka się ożywiła.</example> + <example type="incorrect"><marker>W ślad za</marker> tymi działaniami gospodarka się ożywiła.</example> + </rule> + + + <rule name="„odgrywać znaczenie” (rolę)" id="ODGRYWAC_ZNACZENIE"> + <pattern> + <token skip="2" inflected="yes" regexp="yes">grać|odgrywać</token> + <token>znaczenie</token> + </pattern> + <message>Mówimy „odgrywać <suggestion>rolę</suggestion>”, a nie „odgrywać znaczenie”.</message> + <example type="incorrect"><marker>Odgrywa duże znaczenie</marker> w żegludze różnych typów statków.</example> + <example type="correct"><marker>Odgrywa dużą rolę</marker> w żegludze różnych typów statków.</example> + </rule> + + + <rule name="„wprowadzić coś w obieg” (puścić w obieg)" id="WPROWADZIC_W_OBIEG"> + <pattern> + <token inflected="yes" skip="-1" regexp="yes">wprowadzić|wprowadzać</token> + <token>w</token> + <token>obieg</token> + </pattern> + <message>Mówi się <suggestion>puszczać w obieg</suggestion>, a nie „wprowadzać w obieg”.</message> + <example type="correct">Mafia puściła w obieg sfałszowane dolary.</example> + <example type="incorrect">Mafia <marker>wprowadziła niebawem w obieg</marker> sfałszowane dolary.</example> + </rule> + + <rule id="WYSOKA_FORMA" name="„wysoka forma” (dobra forma, doskonała forma)"> + <pattern> + <token inflected="yes" postag_regexp="yes" postag=".*:f:pneg">wysoki</token> + <token inflected="yes">forma</token> + </pattern> + <message>Nie mówi się „wysoka forma”, lecz <suggestion>dobra forma</suggestion>, <suggestion>doskonała forma</suggestion>.</message> + <example type="correct">Małysz jest w doskonałej formie.</example> + <example type="incorrect"><marker>Wysoka forma</marker> Małysza daje nam nadzieję.</example> + <example type="correct">W górach wysokich forma Małyszowi dopisywała.</example> + </rule> + + + <rule id="W_TYM_WZGLEDZIE" name="„w tym względzie” (w tej sprawie)"> + <pattern> + <token>w</token> + <token>tym</token> + <token>względzie</token> + </pattern> + <message>Wyrażenie „w tym względzie” jest niezalecane. Lepiej:<suggestion>w tej sprawie</suggestion>, <suggestion>w tym zakresie</suggestion>.</message> + <example type="incorrect">Przykładem klasycznym są <marker>w tym względzie</marker> dominujące nurty psychologii.</example> + <example type="correct">Przykładem klasycznym są w tym zakresie dominujące nurty psychologii.</example> + </rule> + <rule id="WYSOKA_FREKWENCJA" name="„wysoka/niska frekwencja” (duża/mała)"> + <pattern> + <token inflected="yes" regexp="yes">wysoki|niski</token> + <token inflected="yes">frekwencja</token> + </pattern> + <message>Nie mówi się „wysoka frekwencja” czy „niska frekwencja”, tylko <suggestion>duża frekwencja</suggestion> i <suggestion>mała frekwencja</suggestion>.</message> + <example type="incorrect">W tym roku w wyborach była bardzo <marker>wysoka frekwencja</marker>.</example> + <example type="incorrect">W tym roku w wyborach była bardzo <marker>niska frekwencja</marker>.</example> + <example type="correct">W tym roku w wyborach była bardzo duża frekwencja.</example> + <example type="correct">W tym roku w wyborach była bardzo mała frekwencja.</example> + </rule> + + + <rule id="POD_ZAMKNIECIEM" name="„pod zamknięciem” (w zamknięciu)"> + <pattern> + <token>pod</token> + <token>zamknięciem</token> + </pattern> + <message>Wyrażenie „pod zamknięciem” jest niepoprawne. Lepiej mówić <suggestion>w zamknięciu</suggestion>, <suggestion>pod kluczem</suggestion> (ten błąd występuje nawet w polskim prawie).</message> + <example type="correct">Towary trzymamy pod kluczem.</example> + <example type="incorrect">Towary trzymamy <marker>pod zamknięciem</marker>.</example> + </rule> + + <rule id="W_DRODZE_WYJATKU" name="„w drodze wyjątku” (wyjątkowo)"> + <pattern> + <token>w</token> + <token>drodze</token> + <token>wyjątku</token> + </pattern> + <message>Wyrażenie „w drodze wyjątku” jest niezalecane (żargon urzędniczy). Lepsza jest forma <suggestion>wyjątkowo</suggestion>.</message> + <example type="correct">Lokalne władze tylko wyjątkowo zezwalają na wjazd.</example> + <example type="incorrect"><marker>W drodze wyjątku</marker> lokalne władze zezwalają na wjazd.</example> + </rule> + + <rule id="CO_I_RUSZ" name="„co i rusz” (co chwila)"> + <pattern> + <token>co</token> + <token>i</token> + <token>rusz</token> + </pattern> + <message>Wyrażenie „co i rusz” jest niepoprawne. Poprawnie mówi się: <suggestion>co chwila</suggestion>, <suggestion>co krok</suggestion> + </message> + <example type="incorrect"><marker>Co i rusz</marker> media informują o tym, że któryś z prominentnych polityków koalicji rządzącej załatwił coś dla siebie.</example> + <example type="correct">Raz po raz media informują o tym, że któryś z prominentnych polityków koalicji rządzącej załatwił coś dla siebie.</example> + </rule> + <rule id="CO_I_RAZ" name="„co i raz” (co chwila)"> + <pattern> + <token>co</token> + <token>i</token> + <token>raz</token> + </pattern> + <message>Wyrażenie „co i raz” jest często uznawane za niepoprawne. Poprawnie mówi się: <suggestion>co chwila</suggestion>, <suggestion>co krok</suggestion> + </message> + <example type="incorrect"><marker>Co i raz</marker> media informują o tym, że któryś z prominentnych polityków koalicji rządzącej załatwił coś dla siebie.</example> + <example type="correct">Raz po raz media informują o tym, że któryś z prominentnych polityków koalicji rządzącej załatwił coś dla siebie.</example> + </rule> + <rule id="ZA_WYJATKIEM" name="„za wyjątkiem” (z wyjątkiem)"> + <pattern> + <token>za</token> + <token>wyjątkiem</token> + </pattern> + <message>Wyrażenie „za wyjątkiem” jest niepoprawne. Poprawne wyrażenie: <suggestion>z wyjątkiem</suggestion>.</message> + <example type="incorrect"><marker>Za wyjątkiem</marker> powyższych sytuacji, będziemy używać i ujawniać informacje o twoim zdrowiu.</example> + <example type="correct">Wyjąwszy powyższe sytuacje, będziemy korzystać z informacji o państwa zdrowiu oraz je ujawniać.</example> + </rule> + <rule id="CIEZKI_ORZECH" name="„ciężki orzech do zgryzienia” (twardy orzech...)"> + <pattern> + <token inflected="yes" regexp="yes">ciężki</token> + <token inflected="yes">orzech</token> + <token>do</token> + <token>zgryzienia</token> + </pattern> + <message>To wyrażenie ma dwie poprawne formy: <suggestion>twardy orzech do zgryzienia</suggestion> lub <suggestion>trudny orzech do zgryzienia</suggestion>.</message> + <example type="incorrect">Gabriel ma trochę diaboliczny wygląd to i tak miał <marker>ciężki orzech do zgryzienia</marker>, z którym poradził sobie jak wiewiórka.</example> + <example type="correct">Gabriel ma trochę diaboliczny wygląd to i dlatego miał twardy orzech do zgryzienia, z którym poradził sobie jak wiewiórka.</example> + </rule> + + <rulegroup id="DLATEGO_BO" name="„dlatego bo” (dlatego)"> + <rule> + <pattern> + <token>dlatego</token> + <token>bo</token> + </pattern> + <message>Zbitka „dlatego bo” jest niepoprawna. Zamiast należy pisać <suggestion>dlatego że</suggestion>, <suggestion>gdyż</suggestion>, <suggestion>bo</suggestion>, <suggestion>ponieważ</suggestion> itd.</message> + <example type="correct">Kowalski nie czytał gazet, gdyż nie umiał czytać.</example> + <example type="incorrect">Kowalski nie czytał gazet, <marker>dlatego bo</marker> nie umiał czytać.</example> + </rule> + + <rule> + <pattern mark_from="0" case_sensitive="no"> + <token>dlatego</token> + <token>,</token> + <token>bo</token> + </pattern> + <message>Zbitka „dlatego, bo” jest niepoprawna. Zamiast należy pisać <suggestion>dlatego że</suggestion>, <suggestion>gdyż</suggestion>, <suggestion>bo</suggestion>, <suggestion>ponieważ</suggestion> itd.</message> + <example type="correct">Kowalski nie czytał gazet, gdyż nie umiał czytać.</example> + <example type="incorrect">Kowalski nie czytał gazet <marker>dlatego, bo</marker> nie umiał czytać.</example> + </rule> + </rulegroup> + + <rulegroup id="DLATEGO_PONIEWAZ" name="„dlatego ponieważ” (dlatego)"> + <rule> + <pattern mark_from="0" case_sensitive="no"> + <token>dlatego</token> + <token>ponieważ</token> + </pattern> + <message>Zbitka „dlatego ponieważ” jest niepoprawna. Zamiast należy pisać <suggestion>dlatego że</suggestion>, <suggestion>gdyż</suggestion>, <suggestion>bo</suggestion>, <suggestion>ponieważ</suggestion> itd.</message> + <example type="correct">Kowalski nie czytał gazet, gdyż nie umiał czytać.</example> + <example type="incorrect">Kowalski nie czytał gazet, <marker>dlatego ponieważ</marker> nie umiał czytać.</example> + </rule> + <rule> + <pattern> + <token>dlatego</token> + <token>,</token> + <token>ponieważ</token> + </pattern> + <message>Zbitka „dlatego, ponieważ” jest niepoprawna. Zamiast należy pisać <suggestion>dlatego że</suggestion>, <suggestion>gdyż</suggestion>, <suggestion>bo</suggestion>, <suggestion>ponieważ</suggestion> itd.</message> + <example type="correct">Kowalski nie czytał gazet, gdyż nie umiał czytać.</example> + <example type="incorrect">Kowalski nie czytał gazet <marker>dlatego, ponieważ</marker> nie umiał czytać.</example> + </rule> + </rulegroup> + <rulegroup id="DLATEGO_GDYZ" name="„dlatego gdyż” (dlatego)"> + <rule> + <pattern> + <token>dlatego</token> + <token>gdyż</token> + </pattern> + <message>Zbitka „dlatego ponieważ” jest niepoprawna. Zamiast należy pisać <suggestion>dlatego że</suggestion>, <suggestion>gdyż</suggestion>, <suggestion>bo</suggestion>, <suggestion>ponieważ</suggestion> itd.</message> + <example type="correct">Kowalski nie czytał gazet, gdyż nie umiał czytać.</example> + <example type="incorrect">Kowalski nie czytał gazet, <marker>dlatego gdyż</marker> nie umiał czytać.</example> + </rule> + <rule> + <pattern> + <token>dlatego</token> + <token>,</token> + <token>gdyż</token> + </pattern> + <message>Zbitka „dlatego, gdyż” jest niepoprawna. Zamiast należy pisać <suggestion>dlatego że</suggestion>, <suggestion>gdyż</suggestion>, <suggestion>bo</suggestion>, <suggestion>ponieważ</suggestion> itd.</message> + <example type="correct">Kowalski nie czytał gazet, gdyż nie umiał czytać.</example> + <example type="incorrect">Kowalski nie czytał gazet <marker>dlatego, gdyż</marker> nie umiał czytać.</example> + </rule> + </rulegroup> + + <!-- tym niemniej --> + <rule id="RULE_NIEMNIEJ" name="„tym niemniej” (niemniej jednak)"> + <pattern mark_from="0" case_sensitive="no"> + <token>tym</token> + <token>niemniej</token> + </pattern> + <message>To wyrażenie to rusycyzm, lepiej użyć <suggestion>niemniej jednak</suggestion>.</message> + <example type="correct">Problem potraktowano niemniej jednak poważnie.</example> + <example type="incorrect">Problem potraktowano <marker>tym niemniej</marker> poważnie.</example> + </rule> + + <rule name="„uznać jako” (za)" id="UZNAC_JAKO"> + <pattern mark_from="1"> + <token skip="-1" inflected="yes" regexp="yes">uznać|uznawać<exception regexp="yes">za|,|który|jaki|co|.*ania</exception></token> + <token>jako</token> + </pattern> + <message>Mówi się „uznać coś <suggestion>za</suggestion> jakieś”</message> + <example type="correct">Ludwik był uznany za wielkiego aktora.</example> + <example type="correct">Ludwik był uznawany za wielkiego aktora.</example> + <example type="incorrect">Ludwik był uznany <marker>jako</marker> wielki aktor.</example> + <example type="incorrect">Uznałem <marker>go jako</marker> straconego dla sprawy.</example> + <example type="correct">Ludwik był uznawany za świetnego księgowego, jako że dbał o finanse firmy.</example> + <example type="correct">Ludzie uznawali ją za piękność.</example> + </rule> + <!-- w każdym bądź razie --> + <rule id="W_KAZDYM_BADZ" name="„w każdym bądź razie” (w każdym razie)"> + <pattern mark_from="0" case_sensitive="no"> + <token>w</token> + <token>każdym</token> + <token>bądź</token> + <token>razie</token> + </pattern> + <message>Poprawną formą jest <suggestion>w każdym razie</suggestion>.</message> + <example type="correct">W każdym razie premier nie miał racji.</example> + <example type="incorrect"><marker>W każdym bądź razie</marker> premier nie miał racji.</example> + </rule> + + <!-- odnośnie do --> + <rule id="ODNOSNIE_DO" name="„odnośnie czegoś” (odnośnie do)"> + <pattern mark_from="0" case_sensitive="no"> + <token>odnośnie</token> + <token negate="yes">do</token> + </pattern> + <message>Poprawną formą jest <suggestion>odnośnie do</suggestion> czegoś.</message> + <example type="correct">Piszę odnośnie do pańskiej propozycji...</example> + <example type="incorrect">Piszę <marker>odnośnie pańskiej</marker> propozycji...</example> + </rule> + + <rule id="PODDAWAC_W_WATPLIWOSC" name="„poddawać w wątpliwość” (podawać w wątpliwość)"> + <pattern mark_from="0" case_sensitive="no"> + <token inflected="yes" regexp="yes">poddawać|poddać</token> + <token>w</token> + <token>wątpliwość</token> + </pattern> + <message>Poprawną formą jest <suggestion>podawać w wątpliwość</suggestion>.</message> + <example type="correct">Nie będę tego podawać w wątpliwość.</example> + <example type="incorrect">Nie będę tego <marker>poddawał w wątpliwość</marker>.</example> + <example type="incorrect">Józio <marker>poddał w wątpliwość</marker> cały proces wychowawczy.</example> + </rule> + + <rule id="POKI_CO" name="„póki co” (na razie)"> + <pattern mark_from="0" case_sensitive="no"> + <token>póki</token> + <token>co</token> + </pattern> + <message>Poprawną formą jest <suggestion>na razie</suggestion>, wyrażenie „póki co” to rusycyzm.</message> + <example type="correct">Na razie cieszmy się z innych korzyści.</example> + <example type="incorrect"><marker>Póki co</marker> cieszmy się z innych korzyści.</example> + </rule> + + </category> + + <category name="Pleonazm"> + <rule name="„długi upływ czasu” (długi czas)" id="DLUGI_UPLYW"> + <pattern> + <token inflected="yes" postag="adj:sg:.*:m" postag_regexp="yes">długi</token> + <token inflected="yes">upływ</token> + <token>czasu</token> + </pattern> + <message>Wyrażenie „długi upływ czasu” to pleonazm. Lepiej powiedzieć: <suggestion>długi czas</suggestion>.</message> + <example type="incorrect">Ze względu na <marker>długi upływ czasu</marker> od momentu spadku wiele informacji na temat tego meteorytu można uznać jako niepewne. </example> + <example type="correct">Ze względu na <marker>długi czas</marker> od momentu spadku wiele informacji o tym meteorycie można uznać za niepewne. </example> + </rule> + + + <rule name="„potencjalna możliwość” (możliwość)" id="POTENCJALNA_MOZLIWOSC"> + <pattern> + <token inflected="yes" postag_regexp="yes" postag="adj:.*:(f|f.n):pneg">potencjalny</token> + <token inflected="yes">możliwość</token> + </pattern> + <message>To wyrażenie to pleonazm. Wystarczy powiedzieć <suggestion>\2</suggestion>.</message> + <example type="correct">To otwiera nowe możliwości.</example> + <example type="incorrect">To otwiera nowe <marker>potencjalne możliwości</marker>.</example> + </rule> + + <rule name="„przychylna akceptacja” (akceptacja)" id="PRZYCHYLNA_AKCEPTACJA"> + <pattern> + <token inflected="yes" postag_regexp="yes" postag="adj:.*:(f|f.n):pneg">przychylny</token> + <token inflected="yes">akceptacja</token> + </pattern> + <message>To wyrażenie to pleonazm. Wystarczy powiedzieć <suggestion>\2</suggestion>.</message> + <example type="correct">Ta propozycja spotkała się z akceptacją.</example> + <example type="incorrect">W tym wypadku wymagana jest <marker>przychylna akceptacja</marker>.</example> + </rule> + + <rule name="„geneza powstania” (geneza)" id="GENEZA_POWSTANIA"> + <pattern mark_to="-1"> + <token inflected="yes">geneza</token> + <token>powstania</token> + <token negate="yes" regexp="yes">listopadowego|warszawskiego|styczniowego</token> + </pattern> + <message>To wyrażenie to pleonazm. Wystarczy powiedzieć <suggestion>\1</suggestion>.</message> + <example type="correct">Geneza tego rękopisu wymaga dalszych badań.</example> + <example type="incorrect"><marker>Geneza powstania</marker> tego rękopisu wymaga dalszych badań.</example> + <example type="correct">Geneza powstania warszawskiego nie jest zagadką.</example> + </rule> + + + + <rule name="„na dzień dzisiejszy” (obecnie)" id="NA_DZIEN_DZISIEJSZY"> + <pattern> + <token>na</token> + <token>dzień</token> + <token>dzisiejszy</token> + </pattern> + <message>To nadużywane i błędne wyrażenie, które stosuje się w celu uzyskania pozornej elegancji wypowiedzi (ze skutkiem przeciwnym). Można je zastąpić wyrazami: <suggestion>obecnie</suggestion>, <suggestion>aktualnie</suggestion>, <suggestion>dzisiaj</suggestion>.</message> + <example type="incorrect"><marker>Na dzień dzisiejszy</marker> wykonano 40 procent planu.</example> + <example type="correct">Wykonano aktualnie 40 procent planu.</example> + </rule> + + <rule id="OKRES_CZASU" name="„okres czasu”, „godzina czasu” (okres, godzina)"> + <pattern> + <token inflected="yes" regexp="yes">okres|godzina|miesiąc|tydzień</token> + <token>czasu</token> + </pattern> + <message>Wyrażenia typu „miesiąc czasu”, „okres czasu” są niepoprawne (pleonazmy). Wystarczy: <suggestion>\1</suggestion>.</message> + <example type="correct">Trwało to miesiąc.</example> + <example type="incorrect">Trwało to <marker>miesiąc czasu</marker>.</example> + <example type="incorrect">Trwało to <marker>godzinę czasu</marker>.</example> + </rule> + <rule id="AURA_POGODOWA" name="„aura pogodowa” (aura)"> + <pattern> + <token inflected="yes">aura</token> + <token inflected="yes" postag_regexp="yes" postag="adj:sg:.*:f:pneg">pogodowy</token> + </pattern> + <message>Wyrażenie „aura pogodowa” jest pleonazmem: wystarczy albo sama <suggestion>\1</suggestion>, albo <suggestion>pogoda</suggestion>.</message> + <example type="incorrect">Taka <marker>aura pogodowa</marker> dała się wszystkim obywatelom we znaki.</example> + <example type="correct">Ta pogoda dała się wszystkim we znaki.</example> + <example type="correct">Przy takiej aurze pogodowych anomalii spodziewać się nie można.</example> + </rule> + <rule id="KAZDY_WTOREK" name="„każdy wtorek miesiąca”"> + <pattern> + <token inflected="yes" regexp="yes">każdy</token> + <token inflected="yes" regexp="yes">poniedziałek|wtorek|środa|czwartek|piątek|sobota|niedziela</token> + <token regexp="yes">tygodnia|miesiąca</token> + </pattern> + <message>Wyrażenia typu „każdy wtorek miesiąca” są pleonastyczne. Wystarczy powiedzieć <suggestion>\1 \2</suggestion>.</message> + <example type="correct">Śmieci są wywożone w każdy wtorek.</example> + <example type="incorrect">Śmieci są wywożone w <marker>każdy wtorek tygodnia</marker>.</example> + </rule> + <rule id="W_GLORII_CHWALY" name="„w glorii chwały” (w glorii)"> + <pattern> + <token>w</token> + <token>glorii</token> + <token>chwały</token> + </pattern> + <message>Mówi się <suggestion>w glorii</suggestion> lub <suggestion>w chwale</suggestion>; „w glorii chwały” to za dużo grzybów w barszcz.</message> + <example type="incorrect">Piłkarska reprezentacja Ekwadoru <marker>w glorii chwały</marker> wróciła do swojego kraju.</example> + <example type="correct">Piłkarska reprezentacja Ekwadoru w glorii wróciła do swojego kraju.</example> + </rule> + <rule id="KURS_NAUKI" name="„kurs nauki” (kurs)"> + <pattern> + <token inflected="yes">kurs</token> + <token>nauki</token> + </pattern> + <message>Wyrażenie „kurs nauki” jest pleonazmem (masłem maślanym). Wystarczy powiedzieć <suggestion>kurs</suggestion>.</message> + <example type="correct">Zapraszamy na kurs języka angielskiego!</example> + <example type="incorrect">Zapraszamy na <marker>kurs nauki</marker> języka angielskiego!</example> + </rule> + <rule name="„miesiąc lipiec” itp." id="W_MIESIACU_LIPCU"> + <pattern> + <token inflected="yes">miesiąc</token> + <token inflected="yes" regexp="yes">styczeń|luty|marzec|kwiecień|maj|czerwiec|lipiec|sierpień|wrzesień|październik|listopad|grudzień</token> + </pattern> + <message>To wyrażenie jest pleonazmem. Wystarczy podać tylko nazwę miesiąca, bez słowa <suggestion>miesiąc</suggestion>.</message> + <example type="correct">W lipcu premier jedzie na wakacje.</example> + <example type="incorrect">W <marker>miesiącu lipcu</marker> premier jedzie na wakacje.</example> + </rule> + + </category> + + <category name="Różne"> + + <rule id="Z_WIELKIEJ_LITERY" name="Rusycyzm: „z wielkiej/małej litery” (wielką literą)"> + <pattern> + <token>z</token> + <token regexp="yes">wielkiej|dużej|małej</token> + <token>litery</token> + </pattern> + <message>Wyrażenia typu „z dużej litery” to rucysyzm. Mówimy: ten wyraz piszemy <suggestion>wielką literą</suggestion>, <suggestion>małą literą</suggestion>.</message> + <example type="correct">Nazwiska piszemy wielką literą.</example> + <example type="incorrect">Nazwiska piszemy <marker>z dużej litery</marker>.</example> + </rule> + <rule id="PANTALYK" name="Wyraz niesamodzielny: „pantałyk”"> + <pattern mark_from="1"> + <token negate="yes">z</token> + <token inflected="yes">pantałyk</token> + </pattern> + <message>Wyraz „pantałyk” jest niesamodzielny i może występować tylko we frazie <suggestion>zbić z pantałyku</suggestion>.</message> + <example type="correct">Ludwik zbił Jarka z pantałyku.</example> + <example type="incorrect">Kazio bawił się <marker>pantałykiem</marker>.</example> + </rule> + + <!-- + <rule name="Błąd interpunkcyjny: tylko nawias otwierający" id="NAWIAS"> + <pattern> + <token skip="-1">(</token> + <token negate="yes" skip="-1">)</token> + <token>.</token> + </pattern> + <message>Brak nawiasu zamykającego (<em>)</em>).</message> + <example type="correct">Mam na myśli zamek (budowlę).</example> + <example type="incorrect">Mam na myśli zamek (budowlę.</example> + </rule> + --> + <rule name="Błąd frazeologiczny: „po prawo” (po prawej)" id="PO_PRAWO"> + <pattern mark_to="-1"> + <token>po</token> + <token>prawo</token> + <token negate="yes">jazdy</token> + </pattern> + <message>Mówimy <suggestion>na prawo</suggestion>, <suggestion>po prawej stronie</suggestion>, <suggestion>z prawej strony</suggestion>.</message> + <example type="correct">Mijamy z prawej strony budynek Oddziału Regionalnego PTTK w Gorzowie.</example> + <example type="incorrect">Mijamy <marker>po prawo</marker> budynek Oddziału Regionalnego PTTK w Gorzowie.</example> + </rule> + <rule name="Błąd frazeologiczny: „po lewo” (po lewej)" id="PO_LEWO"> + <pattern> + <token>po</token> + <token>lewo</token> + </pattern> + <message>Mówimy <suggestion>na lewo</suggestion>, <suggestion>po lewej stronie</suggestion>, <suggestion>z lewej strony</suggestion>.</message> + <example type="correct">Mijamy z lewej strony budynek Oddziału Regionalnego PTTK w Gorzowie.</example> + <example type="incorrect">Mijamy <marker>po lewo</marker> budynek Oddziału Regionalnego PTTK w Gorzowie.</example> + </rule> + + <rule name="Błąd frazeologiczny: „wszem i wobec” (wszem wobec)" id="WSZEM_I_WOBEC"> + <pattern> + <token>wszem</token> + <token>i</token> + <token>wobec</token> + </pattern> + <message>Ten związek frazeologiczny ma prawidłową postać <suggestion>wszem wobec</suggestion>.</message> + <example type="correct">Ogłaszam wszem ... [truncated message content] |
From: <mil...@us...> - 2006-09-23 14:56:08
|
Revision: 22 http://svn.sourceforge.net/morfologik/?rev=22&view=rev Author: milek_pl Date: 2006-09-23 07:55:51 -0700 (Sat, 23 Sep 2006) Log Message: ----------- nowa wersja skrypt?\195?\179w, przyspieszenie dzia?\197?\130ania Modified Paths: -------------- scripts/Makefile scripts/forma_pdst.awk scripts/morfo_baza.txt Added Paths: ----------- scripts/aff5.awk Modified: scripts/Makefile =================================================================== --- scripts/Makefile 2006-09-10 13:06:39 UTC (rev 21) +++ scripts/Makefile 2006-09-23 14:55:51 UTC (rev 22) @@ -12,11 +12,8 @@ #polish.all - ze s\xB3ownika alternatywnego #build - ze s\xB3ownika alternatywnego -afiksy: - ./build polish.all - ./ispell -e2 -d ./polish <polish.all >afiksy.txt formy: formy.txt formy_pdst.txt - gawk -f aff3.awk afiksy.txt >formy.txt + gawk -f aff5.awk polish.all >formy.txt gawk -f forma_pdst.awk polish.all >formy_pdst.txt lacz: formy_ost.txt cat formy.txt formy_pdst.txt | sort -u > formy_ost.txt @@ -34,13 +31,13 @@ fsa: gawk -f morph_data.awk morfologik.txt | fsa_ubuild -O -o polish.dict -all: afiksy formy lacz slownik anot fsa +all: formy lacz slownik anot fsa test: #formy_ht_3.txt - plik testowy # gawk -f compare.awk formy_ht_3.txt >konflikty.txt grep "##" slownik_regularny.txt >raport.txt - gawk -f test_oboczne.awk slownik_regularny.txt >>raport.txt +# gawk -f test_oboczne.awk slownik_regularny.txt >>raport.txt clean: rm formy*.txt Added: scripts/aff5.awk =================================================================== --- scripts/aff5.awk (rev 0) +++ scripts/aff5.awk 2006-09-23 14:55:51 UTC (rev 22) @@ -0,0 +1,47 @@ +BEGIN {FS="[ ]+" +affixfile="pl_PL.aff"; #plik afiks\xF3w +while ((getline < affixfile) > 0){ + if ($5=="" && $1=="SFX") { + down_counter_sfx=$4 + koncowki[$2 "count"]=down_counter_sfx + } + if ($5!="" && $1=="SFX") { + koncowki[$2 down_counter_sfx "cut"]=$3 + if ($4!="0") + koncowki[$2 down_counter_sfx "suffix"]=$4 + koncowki[$2 down_counter_sfx "stem"]=$5 + down_counter_sfx-- + } + if ($5=="" && $1=="PFX") { + down_counter_pfx=$4 + prefiksy[$2 "count"]=down_counter_pfx + } + if ($5!="" && $1=="PFX") { + prefiksy[$2 down_counter_pfx]=$3"\t"$4"\t"$5 + down_counter_pfx-- + } +} +FS=" |/" +} + +/\//{ +wyraz=$1"__END_" +split($2, flagi,"") +for (n in flagi) + { + counter = koncowki[flagi[n] "count"] + if (counter!=0) + for (k=1;k<=counter;k++) + { + if (wyraz~koncowki[flagi[n] k "stem"]"__END_") { + cut = koncowki[flagi[n] k "cut"] + if (cut!="0") rdzen = gensub("__END_","","g",gensub(cut"__END_","",1, wyraz)) + else rdzen = $1 + print rdzen koncowki[flagi[n] k "suffix"]"\t"$1"\t"$2"\t"flagi[n]"\t"cut"\t"koncowki[flagi[n] k "suffix"]"\t"koncowki[flagi[n] k "stem"] + if ($2~/b/) + print "nie" rdzen koncowki[flagi[n] k "suffix"]"\t"$1"\t"$2"\tb"flagi[n]"\t"cut"\t"koncowki[flagi[n] k "suffix"]"\t"koncowki[flagi[n] k "stem"] + } + } + + } +} Modified: scripts/forma_pdst.awk =================================================================== --- scripts/forma_pdst.awk 2006-09-10 13:06:39 UTC (rev 21) +++ scripts/forma_pdst.awk 2006-09-23 14:55:51 UTC (rev 22) @@ -1,5 +1,7 @@ #skrypt do korelowania podstawowych form s\xB3\xF3w (bez ko\xF1c\xF3wek) #z tagami -#wej\x9Cciowy plik: A w formacie ispella (nie myspella!) +#wej\x9Cciowy plik: polish.all w formacie ispella (nie myspella!) BEGIN {FS="\/"} -{if (NF>1) print $1"\t"$1"\t"$2"\t"$2"\t0\t0\t"} \ No newline at end of file +{if (NF>1) {print $1"\t"$1"\t"$2"\t"$2"\t0\t0\t" + if ($2~/b/) print "nie"$1"\t"$1"\t"$2"\t"$2"!\t0\t0\t"} +} \ No newline at end of file Modified: scripts/morfo_baza.txt =================================================================== --- scripts/morfo_baza.txt 2006-09-10 13:06:39 UTC (rev 21) +++ scripts/morfo_baza.txt 2006-09-23 14:55:51 UTC (rev 22) @@ -2,6 +2,9 @@ A A 0 0 subst:sg:nom:f OSTos o 0 owie [ae]y subst:pl:nom.voc:m1 MNTo M a ie [^sz]na subst:sg:loc:m1 +MNTo M a o [^b]abula subst:sg:voc:m1 +MNTo M a o [^m]atula subst:sg:voc:m1 +L L a u enia subst:sg:voc:f A A a e [cijl\xBF]a subst:pl:nom.acc.voc:f A A a e wna subst:pl:nom.acc.voc:f A A \xB1d\xBC \xEAdzie \xB1d\xBC subst:pl:nom.acc.voc:f @@ -26,16 +29,16 @@ AL L ja i ja subst:sg:gen.dat.loc:f ALN A a e [cijl\xBF]a subst:pl:nom.acc.voc:f ALN ALN 0 0 subst:sg:nom:f -ALN L a o [^aeuy]nia subst:sg:voc:f +ALN L a o [^aeouy]nia subst:sg:voc:f ALN L a o [^ai]dzia subst:sg:voc:f -ALN L a o [^bimrt]unia subst:sg:voc:f +ALN L a o [^bimrtw\xBF]unia subst:sg:voc:f ALN L a o [^bmoi]cia subst:sg:voc:f ALN L a o [^i]a subst:sg:voc:f ALN L a o [^id]zia subst:sg:voc:f -ALN L a o [^r]ynia subst:sg:voc:f +ALN L a o [^er][oy]nia subst:sg:voc:f ALN L a o pia subst:sg:voc:f ALN L a u [^\xEA][^w].sia subst:sg:voc:f -ALN L a u [bimrt]unia subst:sg:voc:f +ALN L a u [bimrtw\xBF]unia subst:sg:voc:f ALN L a \xB1 [ij]a subst:sg:inst:f ALN L a \xEA [ij]a subst:sg:acc:f ALN L ia i ia subst:sg:gen.dat.loc:f @@ -83,24 +86,24 @@ ALNTo o a owie a subst:pl:nom:m1 ALNm A a e [cijl\xBF]a subst:pl:nom.acc.voc:f ALNm ALNm 0 0 subst:sg:nom:f -ALNm L a o [^aeuy]nia subst:sg:voc:f +ALNm L a o [^aeouy]nia subst:sg:voc:f ALNm L a o [^ai]dzia subst:sg:voc:f -ALNm L a o [^bimrt]unia subst:sg:voc:f +ALNm L a o [^bimrtw\xBF]unia subst:sg:voc:f ALNm L a o [^bmoi]cia subst:sg:voc:f ALNm L a o [^hi]ania subst:sg:voc:f ALNm L a o [^i]a subst:sg:voc:f ALNm L a o [^id]zia subst:sg:voc:f -ALNm L a o [^r]ynia subst:sg:voc:f +ALNm L a o [^er][oy]nia subst:sg:voc:f ALNm L a o wusia subst:sg:voc:f ALNm L a o \xEAbusia subst:sg:voc:f ALNm L a u [^\xEA][^w].sia subst:sg:voc:f ALNm L a u [ai]dzia subst:sg:voc:f -ALNm L a u [bimrt]unia subst:sg:voc:f +ALNm L a u [bimrtw\xBF]unia subst:sg:voc:f ALNm L a u [bmoi]cia subst:sg:voc:f ALNm L a u [hi]ania subst:sg:voc:f ALNm L a u enia subst:sg:voc:f ALNm L a u izia subst:sg:voc:f -ALNm L a u rynia subst:sg:voc:f +ALNm L a u [er][oy]nia subst:sg:voc:f ALNm L a \xB1 [ij]a subst:sg:inst:f ALNm L a \xEA [ij]a subst:sg:acc:f ALNm L ia i ia subst:sg:gen.dat.loc:f @@ -783,6 +786,10 @@ BEFGHJej J sn\xB1\xE6 \xB6niecie sn\xB1\xE6 verb:pl:sec:?perf BEFGHJej J sn\xB1\xE6 \xB6niemy sn\xB1\xE6 verb:pl:pri:?perf BEFGHJej J sn\xB1\xE6 \xB6niesz sn\xB1\xE6 verb:sg:sec:?perf +EJ J sn\xB1\xE6 \xB6nie sn\xB1\xE6 verb:sg:ter:?perf +EJ J sn\xB1\xE6 \xB6niecie sn\xB1\xE6 verb:pl:sec:?perf +EJ J sn\xB1\xE6 \xB6niemy sn\xB1\xE6 verb:pl:pri:?perf +EJ J sn\xB1\xE6 \xB6niesz sn\xB1\xE6 verb:sg:sec:?perf BEFGHJej J \xB1\xE6 \xEA sn\xB1\xE6 verb:sg:pri:?perf BEFGHJej J \xE6 sn\xB1\xE6 verb:ter:pl:?perf BEFGHJej e sn\xB1\xE6 \xB6ni\xEAto sn\xB1\xE6 verb:imps @@ -995,6 +1002,17 @@ BEFHJej E sn\xB1\xE6 \xB6ni\xEAtym sn\xB1\xE6 ppas:pl:dat:f.m.n+ppas:sg:inst.loc:m.n BEFHJej E sn\xB1\xE6 \xB6ni\xEAtymi sn\xB1\xE6 ppas:pl:inst:f.m.n BEFHJej E sn\xB1\xE6 \xB6ni\xEAt\xB1 sn\xB1\xE6 ppas:sg:acc.inst:f +EJ E sn\xB1\xE6 \xB6ni\xEAci sn\xB1\xE6 ppas:pl:nom.voc:m1 +EJ E sn\xB1\xE6 \xB6ni\xEAta sn\xB1\xE6 ppas:sg:nom.voc:f +EJ E sn\xB1\xE6 \xB6ni\xEAte sn\xB1\xE6 ppas:sg:nom.acc.voc:n+ppas:pl:nom.acc.voc:f.n +EJ E sn\xB1\xE6 \xB6ni\xEAtego sn\xB1\xE6 ppas:sg:gen:m.n +EJ E sn\xB1\xE6 \xB6ni\xEAtej sn\xB1\xE6 ppas:sg:gen.dat.loc:f +EJ E sn\xB1\xE6 \xB6ni\xEAtemu sn\xB1\xE6 ppas:sg:dat:m.n +EJ E sn\xB1\xE6 \xB6ni\xEAty sn\xB1\xE6 ppas:sg:nom.voc:m +EJ E sn\xB1\xE6 \xB6ni\xEAtych sn\xB1\xE6 ppas:pl:acc.gen.loc:m+ppas:pl:gen.loc:f.n +EJ E sn\xB1\xE6 \xB6ni\xEAtym sn\xB1\xE6 ppas:pl:dat:f.m.n+ppas:sg:inst.loc:m.n +EJ E sn\xB1\xE6 \xB6ni\xEAtymi sn\xB1\xE6 ppas:pl:inst:f.m.n +EJ E sn\xB1\xE6 \xB6ni\xEAt\xB1 sn\xB1\xE6 ppas:sg:acc.inst:f BEFHJej F \xB1\xE6 \xEAli [^\xEA]sn\xB1\xE6 verb:praet:pl:ter:m1:?perf BEFHJej F \xB1\xE6 \xEAliby [^\xEA]sn\xB1\xE6 verb:aglt:praet:pl:ter:m1:?perf BEFHJej F \xB1\xE6 \xEAliby\xB6cie [^\xEA]sn\xB1\xE6 verb:aglt:praet:pl:sec:m1:?perf @@ -2602,6 +2620,8 @@ BEHIJdik I \xE6 sz [bcdfghijlkmnstwz\xBF]a\xE6 verb:sg:sec:?perf BEHIJdik J a\xE6 e ja\xE6 verb:sg:ter:?perf BEHIJdik J a\xE6 ecie ja\xE6 verb:pl:sec:?perf +BHJdik J a\xE6 e ja\xE6 verb:sg:ter:?perf +BHJdik J a\xE6 ecie ja\xE6 verb:pl:sec:?perf BEHIJdik J a\xE6 eje [il]a\xE6 verb:sg:ter:?perf BEHIJdik J a\xE6 ejecie [il]a\xE6 verb:pl:sec:?perf BEHIJdik J a\xE6 ejemy [il]a\xE6 verb:pl:pri:?perf @@ -2610,6 +2630,8 @@ BEHIJdik J a\xE6 ej\xEA [il]a\xE6 verb:sg:pri:?perf BEHIJdik J a\xE6 emy ja\xE6 verb:pl:pri:?perf BEHIJdik J a\xE6 esz ja\xE6 verb:sg:sec:?perf +BHJdik J a\xE6 emy ja\xE6 verb:pl:pri:?perf +BHJdik J a\xE6 esz ja\xE6 verb:sg:sec:?perf BEHIJdik J a\xE6 ie [^s]ba\xE6 verb:sg:ter:?perf BEHIJdik J a\xE6 iecie [^s]ba\xE6 verb:pl:sec:?perf BEHIJdik J a\xE6 iemy [^s]ba\xE6 verb:pl:pri:?perf @@ -2630,6 +2652,8 @@ BEHIJdik J a\xE6 z\xEA [^s]sa\xE6 verb:sg:pri:?perf BEHIJdik J a\xE6 \xB1 ja\xE6 verb:ter:pl:?perf BEHIJdik J a\xE6 \xEA ja\xE6 verb:sg:pri:?perf +BHJdik J a\xE6 \xB1 ja\xE6 verb:ter:pl:?perf +BHJdik J a\xE6 \xEA ja\xE6 verb:sg:pri:?perf BEHIJdik J ga\xE6 \xBFe \xB3ga\xE6 verb:sg:ter:?perf BEHIJdik J ga\xE6 \xBFecie \xB3ga\xE6 verb:pl:sec:?perf BEHIJdik J ga\xE6 \xBFemy \xB3ga\xE6 verb:pl:pri:?perf @@ -8189,6 +8213,12 @@ BGHIJdik B a\xE6 my ja\xE6 verb:impt:pl:pri:perf BGHIJdik B a\xE6 my\xBF ja\xE6 verb:impt:pl:pri:perf BGHIJdik B a\xE6 \xBFe ja\xE6 verb:impt:sg:sec:perf +BHJdik B a\xE6 ja\xE6 verb:impt:sg:sec:?perf +BHJdik B a\xE6 cie ja\xE6 verb:impt:pl:sec:perf +BHJdik B a\xE6 cie\xBF ja\xE6 verb:impt:pl:sec:perf +BHJdik B a\xE6 my ja\xE6 verb:impt:pl:pri:perf +BHJdik B a\xE6 my\xBF ja\xE6 verb:impt:pl:pri:perf +BHJdik B a\xE6 \xBFe ja\xE6 verb:impt:sg:sec:perf BGHIJdik BGHIJdik 0 0 verb:inf:perf BGHIJdik G \xE6 li [jtu]a\xE6 adj:pl:nom.voc:m1 BGHIJdik G \xE6 \xB3a [jtu]a\xE6 adj:sg:nom.voc:f @@ -24447,12 +24477,13 @@ KMNn n a [^z]a subst:pl:gen:f KMNn n a a subst:pl:gen:f L L 0 0 subst:sg:nom:f -L L a o [^aeuy]nia subst:sg:voc:f +L L a o [^aeouy]nia subst:sg:voc:f L L a o [^hi]ania subst:sg:voc:f L L a o [^i]a subst:sg:voc:f -L L a o [^r]ynia subst:sg:voc:f -L L a u [bimrt]unia subst:sg:voc:f -L L a o [^bimrt]unia subst:sg:voc:f +L L a o [^er][oy]nia subst:sg:voc:f +L L a u [bimrtw\xBF]unia subst:sg:voc:f +L L a o [^bimrtw\xBF]unia subst:sg:voc:f +L L a o [^id]zia subst:sg:voc:f L L a \xB1 [ij]a subst:sg:inst:f L L a \xEA [ij]a subst:sg:acc:f L L ia i ia subst:sg:gen.dat.loc:f+subst:pl:gen:f @@ -24583,6 +24614,7 @@ M M s\xB3a \xB6le s\xB3a subst:sg:dat.loc:f M M ta cie [^s]ta subst:sg:dat.loc:f M M zna \xBCnie [^crs]zna subst:sg:dat.loc:f +M M sta \xB6cie [^a]sta subst:sg:dat.loc:f M M \xE6 ci [^e]\xB6\xE6 subst:sg:gen:f M M \xE6 ci [^e\xB6]\xE6 subst:sg:gen:f M M \xE6 ci [^h\xB3]e\xE6 subst:sg:gen.dat.loc:f @@ -24601,9 +24633,11 @@ MN M 0 i [^\xF3]l subst:sg:gen:f M M 0 i [^\xF3]l subst:sg:gen:f MN M 0 y [^e]sz subst:sg:gen:f +M M 0 y [^e]sz subst:sg:gen:f M M 0 y c subst:sg:gen:f MN M 0 y [^s]z subst:sg:gen:f MN M 0 \xB1 [^e]sz subst:sg:inst:f +M M 0 \xB1 [^e]sz subst:sg:inst:f MN M 0 \xB1 [^s]z subst:sg:inst:f MN M 0 \xB1 [^\xF3]l subst:sg:inst:f M M 0 \xB1 [^\xF3]l subst:sg:inst:f @@ -24924,6 +24958,7 @@ MNTm m ka ek [^\xE6\xEAo\xB6\xF1\xBC]ka subst:pl:gen:m1 MNm m na en [^mnow]na subst:pl:gen:f MNm m na ien [mnw]na subst:pl:gen:f +MNm m cia \xE6 cia subst:pl:gen:f MNm m oba \xF3b oba subst:pl:gen:f MNm m oda \xF3d oda subst:pl:gen:f MNm m odza \xF3dz odza subst:pl:gen:f @@ -25318,6 +25353,10 @@ OPSTZoqstwz P er rem [^i]er subst:sg:inst:m OPSTZoqstwz P er rowi [^i]er subst:sg:dat:m OPSTZoqstwz P er rze [^i]er subst:sg:loc:m +PZoz P er ra [^i]er subst:sg:gen:m +PZoz P er rem [^i]er subst:sg:inst:m +PZoz P er rowi [^i]er subst:sg:dat:m +PZoz P er rze [^i]er subst:sg:loc:m OPSTZoqstwz S 0 ach [^a\xE6\xF1o\xB6w\xBCx] subst:pl:loc:m OPSTZoqstwz S 0 ami [^a\xE6\xF1o\xB6w\xBCx] subst:pl:inst:m OPSTZoqstwz S 0 om [^a\xE6\xF1o\xB6w\xBCx] subst:pl:dat:m @@ -25326,12 +25365,17 @@ OPSTZoqstwz Z er rami [^i]er subst:pl:inst:m OPSTZoqstwz Z er rom [^i]er subst:pl:dat:m OPSTZoqstwz Z er r\xF3w [^i]er subst:pl:acc.gen:m1 +PZoz Z er rach [^i]er subst:pl:loc:m +PZoz Z er rami [^i]er subst:pl:inst:m +PZoz Z er rom [^i]er subst:pl:dat:m +PZoz Z er r\xF3w [^i]er subst:pl:acc.gen:m1 OPSTZoqstwz o 0 owie [^a\xE6io\xF1\xB6y\xBCx] subst:pl:nom:m1 OPSTZoqstwz q 0 zy r subst:pl:nom:m1 OPSTZoqstwz s 0 y [^ac\xE6gjkl\xF1o\xB6yz\xBC\xBFx] subst:pl:nom:m OPSTZoqstwz t er rzy ter subst:pl:nom.voc:m1 OPSTZoqstwz w er rowie [pt]er subst:pl:nom.voc:m1 OPSTZoqstwz z er ry [^i]er subst:pl:nom.acc.voc:m +PZoz z er ry [^i]er subst:pl:nom.acc.voc:m OPSTZoqswz O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m OPSTZoqswz O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m OPSTZoqswz O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m @@ -25358,6 +25402,16 @@ OPSTZosz O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m1 OPSTZosz O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m OPSTZosz O \xB3 le [^n]io\xB3 subst:sg:loc:m1 +OTZ O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:acc.gen:m1 +OTZ O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:instr:m1 +OTZ O 0 ie [^c\xE6dghjkl\xB3\xF1or\xB6twyz\xBF\xBCx] subst:sg:loc.voc:m1 +OTZ O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m1 +OTZ OTZ 0 0 subst:sg:nom:m1 +OTZ T 0 \xF3w [^a\xE6o\xF1\xB6w\xBCx] subst:pl:acc.gen:m1 +OTZ Z in [^t]ianin subst:pl:acc.gen:m1 +OTZ Z in ach nin subst:pl:loc:m1 +OTZ Z in ami nin subst:pl:instr:m1 +OTZ Z in om nin subst:pl:dat:m1 OTZosz O \xB3 le [^n]io\xB3 subst:sg:loc:m1 OPSTZosz OPSTZosz 0 0 subst:sg:nom:m1 OTZosz OTZosz 0 0 subst:sg:nom:m1 @@ -25602,6 +25656,7 @@ OSTo O \xE6 ciowi \xE6 subst:sg:dat:m1 OSTo O \xE6 ciu \xE6 subst:sg:loc.voc:m1 OSTo O \xB3 le [^o]\xB3 subst:sg:loc:m +O O \xB3 le [^o]\xB3 subst:sg:loc:m OSTo O \xF1 nia \xF1 subst:sg:gen:m OSTo O \xF1 niem \xF1 subst:sg:inst:m OSTo O \xF1 niowi \xF1 subst:sg:dat:m @@ -25631,15 +25686,27 @@ OSTop O 0 ie [^c\xE6dghjkl\xB3\xF1or\xB6twyz\xBF\xBCx] subst:sg:loc:m OSTop O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m OSTop OSTop 0 0 subst:sg:nom:m1 +OSt O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m +OSt O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m +OSt O 0 ie [^c\xE6dghjkl\xB3\xF1or\xB6twyz\xBF\xBCx] subst:sg:loc:m +OSt O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m +OSt OSt 0 0 subst:sg:nom:m1 OSTop S 0 ach [^a\xE6\xF1o\xB6w\xBCx] subst:pl:loc:m OSTop S 0 ami [^a\xE6\xF1o\xB6w\xBCx] subst:pl:inst:m OSTop S 0 om [^a\xE6\xF1o\xB6w\xBCx] subst:pl:dat:m -OSTop T 0 \xF3w [^a\xE6o\xF1\xB6w\xBCx] subst:pl:gen:m +OSt S 0 ach [^a\xE6\xF1o\xB6w\xBCx] subst:pl:loc:m +OSt S 0 ami [^a\xE6\xF1o\xB6w\xBCx] subst:pl:inst:m +OSt S 0 om [^a\xE6\xF1o\xB6w\xBCx] subst:pl:dat:m +OSTop T 0 \xF3w [^a\xE6o\xF1\xB6w\xBCx] subst:pl:gen:m OSTop o 0 owie [^a\xE6io\xF1\xB6y\xBCx] subst:pl:nom.voc:m OSTop p \xB1b \xEAbia \xB1b subst:sg:gen:m OSTop p \xB1b \xEAbiem \xB1b subst:sg:inst:m OSTop p \xB1b \xEAbiowi \xB1b subst:sg:dat:m OSTop p \xB1b \xEAbiu \xB1b subst:sg:loc.voc:m +p p \xB1b \xEAbia \xB1b subst:sg:gen:m +p p \xB1b \xEAbiem \xB1b subst:sg:inst:m +p p \xB1b \xEAbiowi \xB1b subst:sg:dat:m +p p \xB1b \xEAbiu \xB1b subst:sg:loc.voc:m OSToq O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m OSToq O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m OSToq O 0 iem [gk] subst:sg:inst:m @@ -26131,6 +26198,7 @@ OZt Z in \xF3w manin subst:pl:acc.gen:m1 OZt Z in \xF3w tianin subst:pl:acc.gen:m1 OZt t n e nin subst:pl:nom.voc:m1 +OSt t n e nin subst:pl:nom.voc:m1 Os O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m Os O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m Os O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m @@ -26150,6 +26218,22 @@ P P ec cem [djlp\xBF]ec subst:sg:inst:m P P ec cowi [djlp\xBF]ec subst:sg:dat:m P P ec cu [djlp\xBF]ec subst:sg:loc.voc:m +P P siec \xB6ca siec subst:sg:gen:m +P P siec \xB6cem siec subst:sg:inst:m +P P siec \xB6cowi siec subst:sg:dat:m +P P siec \xB6cu siec subst:sg:loc.voc:m +P P ziec \xBCca ziec subst:sg:gen:m +P P ziec \xBCcem ziec subst:sg:inst:m +P P ziec \xBCcowi ziec subst:sg:dat:m +P P ziec \xBCcu ziec subst:sg:loc.voc:m +P P \xB1b \xEAba \xB1b subst:sg:gen:m +P P \xB1b \xEAbem \xB1b subst:sg:inst:m +P P \xB1b \xEAbie \xB1b subst:sg:loc.voc:m +P P \xB1b \xEAbowi \xB1b subst:sg:dat:m +P P \xF3g oga \xF3g subst:sg:gen:m +P P \xF3g ogiem \xF3g subst:sg:inst:m +P P \xF3g ogowi \xF3g subst:sg:dat:m +P P \xF3g ogu \xF3g subst:sg:loc.voc:m P P ek ka [^i]ek subst:sg:gen:m P P ek kiem [^i]ek subst:sg:inst:m P P ek kowi [^i]ek subst:sg:dat:m @@ -26325,6 +26409,10 @@ PZtz P zec cem rzec subst:sg:inst:m PZtz P zec cowi rzec subst:sg:dat:m PZtz P zec cu rzec subst:sg:loc:m +P P zec ca rzec subst:sg:gen:m +P P zec cem rzec subst:sg:inst:m +P P zec cowi rzec subst:sg:dat:m +P P zec cu rzec subst:sg:loc:m PZtz P ziec \xBCca ziec subst:sg:gen:m PZtz P ziec \xBCcem ziec subst:sg:inst:m PZtz P ziec \xBCcowi ziec subst:sg:dat:m @@ -26420,6 +26508,10 @@ PZwz P siek \xB6kiem siek subst:sg:inst:m1 PZwz P siek \xB6kowi siek subst:sg:dat:m1 PZwz P siek \xB6ku siek subst:sg:loc.voc:m +P P siek \xB6ka siek subst:sg:acc.gen:m1 +P P siek \xB6kiem siek subst:sg:inst:m1 +P P siek \xB6kowi siek subst:sg:dat:m1 +P P siek \xB6ku siek subst:sg:loc.voc:m PZwz P \xF3d oda \xF3d subst:sg:acc.gen:m1 PZwz P \xF3d odem \xF3d subst:sg:inst:m3 PZwz P \xF3d odowi \xF3d subst:sg:dat:m3 @@ -26643,6 +26735,10 @@ PZz P zec cem rzec subst:sg:inst:m PZz P zec cowi rzec subst:sg:dat:m PZz P zec cu rzec subst:sg:loc:m +P P zec ca rzec subst:sg:gen:m +P P zec cem rzec subst:sg:inst:m +P P zec cowi rzec subst:sg:dat:m +P P zec cu rzec subst:sg:loc:m PZwz P zec ca rzec subst:sg:gen:m PZwz P zec cem rzec subst:sg:inst:m PZwz P zec cowi rzec subst:sg:dat:m @@ -26714,6 +26810,14 @@ PZz P \xF3\xB3 o\xB3a \xF3\xB3 subst:sg:gen:m PZz P \xF3\xB3 o\xB3em \xF3\xB3 subst:sg:inst:m PZz P \xF3\xB3 o\xB3owi \xF3\xB3 subst:sg:dat:m +P P \xF3\xB3 ole [^i]\xF3\xB3 subst:sg:loc.voc:m +P P \xF3\xB3 o\xB3a \xF3\xB3 subst:sg:gen:m +P P \xF3\xB3 o\xB3em \xF3\xB3 subst:sg:inst:m +P P \xF3\xB3 o\xB3owi \xF3\xB3 subst:sg:dat:m +P P \xF3\xB3 ole [^i]\xF3\xB3 subst:sg:loc.voc:m +P P \xF3\xB3 o\xB3a \xF3\xB3 subst:sg:gen:m +P P \xF3\xB3 o\xB3em \xF3\xB3 subst:sg:inst:m +P P \xF3\xB3 o\xB3owi \xF3\xB3 subst:sg:dat:m PZz P \xF3\xBCd\xBC o\xBCdzia \xF3\xBCd\xBC subst:sg:gen:m PZz P \xF3\xBCd\xBC o\xBCdziem \xF3\xBCd\xBC subst:sg:inst:m PZz P \xF3\xBCd\xBC o\xBCdziowi \xF3\xBCd\xBC subst:sg:dat:m @@ -27083,6 +27187,7 @@ Q Q 0 ie [^c\xE6dghjkl\xB3m\xF1rtyz\xBF\xBCx] subst:sg:loc.voc:m3 QSTos Q 0 ie [^c\xE6dghjkl\xB3m\xF1rtyz\xBF\xBCx] subst:sg:loc.voc:m3 Q Q 0 ie [adeijl\xB3ortuyz]m subst:sg:loc.voc:m3 +Q Q azd e\xBCdzie azd subst:sg:loc.voc:m3 Q Q 0 ie [aeiou]z subst:pl:loc.voc:m1 Q Q 0 iem [gk] subst:sg:inst:m3 QSTqs Q 0 iem [gk] subst:sg:inst:m3 @@ -27133,6 +27238,10 @@ QRSTZsz R \xF3\xB3 o\xB3em [^i]\xF3\xB3 subst:sg:inst:m3 QRSTZsz R \xF3\xB3 o\xB3owi [^i]\xF3\xB3 subst:sg:dat:m3 QRSTZsz R \xF3\xB3 o\xB3u [^i]\xF3\xB3 subst:sg:gen:m3 +R R \xF3\xB3 ole [^i]\xF3\xB3 subst:sg:loc.voc:m3 +R R \xF3\xB3 o\xB3em [^i]\xF3\xB3 subst:sg:inst:m3 +R R \xF3\xB3 o\xB3owi [^i]\xF3\xB3 subst:sg:dat:m3 +R R \xF3\xB3 o\xB3u [^i]\xF3\xB3 subst:sg:gen:m3 QRSTZsz R \xB1b \xEAbem \xB1b subst:sg:inst:m3 QRSTZsz R \xB1b \xEAbie \xB1b subst:sg:loc.voc:m3 QRSTZsz R \xB1b \xEAbowi \xB1b subst:sg:dat:m3 @@ -27354,6 +27463,10 @@ R R er rowi [^i]er subst:sg:dat:m R R er ru [^i]er subst:sg:gen:m R R er rze [^i]er subst:sg:loc:m +R R \xF3r orem \xF3r subst:sg:inst:m +R R \xF3r orowi \xF3r subst:sg:dat:m +R R \xF3r oru \xF3r subst:sg:gen:m +R R \xF3r orze \xF3r subst:sg:loc:m R R \xF3d odem \xF3d subst:sg:inst:m R R \xF3d odowi \xF3d subst:sg:dat:m R R \xF3d odu \xF3d subst:sg:gen:m @@ -27744,6 +27857,10 @@ STo S a om a subst:pl:dat:m STo S o ach o subst:pl:loc:m STo S o ami o subst:pl:inst:m +STo S 0 ach [^\xF3]w subst:pl:loc:m +STo S 0 ami [^\xF3]w subst:pl:inst:m +STo S 0 om [^\xF3]w subst:pl:dat:m +STo T 0 \xF3w [^\xF3]w subst:pl:gen:m STo STo 0 0 subst:sg:nom:m1 STo T 0 \xF3w [^a\xE6o\xF1\xB6w\xBCx] subst:pl:gen:m STo T a \xF3w a subst:pl:gen:m @@ -27905,6 +28022,7 @@ U U o u [ki]o subst:sg:dat:n+subst:sg:loc:n U U o u o subst:sg:dat:n+subst:sg:loc:n U U o zie [^z]do subst:sg:loc:n +U U o ze ro subst:sg:loc:n U U s\xB3o \xB6le s\xB3o subst:sg:loc:n U U to cie [^ast]to subst:sg:loc:n U U zno \xBCnie zno subst:sg:loc.voc:m @@ -28073,6 +28191,11 @@ UVs U o em [^gk]o subst:sg:inst:m UVs U o u o subst:sg:dat:m+subst:sg:loc.voc:m UVs UVs 0 0 subst:sg:nom:m +Us U o a o subst:sg:acc.gen:m +Us U o em [^gk]o subst:sg:inst:m +Us U o u o subst:sg:dat:m+subst:sg:loc.voc:m +Us Us 0 0 subst:sg:nom:m +Us s o e o subst:pl:nom:m UVs V 0 m o subst:pl:dat:m UVs V o ach o subst:pl:loc:m UVs V o ami o subst:pl:inst:m This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mil...@us...> - 2006-09-10 13:06:46
|
Revision: 21 http://svn.sourceforge.net/morfologik/?rev=21&view=rev Author: milek_pl Date: 2006-09-10 06:06:39 -0700 (Sun, 10 Sep 2006) Log Message: ----------- troch?\196?\153 poprawek Modified Paths: -------------- scripts/slownik_nieregularny.txt Modified: scripts/slownik_nieregularny.txt =================================================================== --- scripts/slownik_nieregularny.txt 2006-09-10 13:05:45 UTC (rev 20) +++ scripts/slownik_nieregularny.txt 2006-09-10 13:06:39 UTC (rev 21) @@ -3018,6 +3018,8 @@ wpierw wpierw indecl wprawdzie wprawdzie adv wprawniej wprawnie adv:comp +wr\xEAcz wr\xEAcz adv +wr\xEAcz wr\xEAcz qub wprost wprost adv wprz\xF3d wprz\xF3d adv wprz\xF3dy wprz\xF3dy adj:sg:nom:m This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mil...@us...> - 2006-09-10 13:06:01
|
Revision: 20 http://svn.sourceforge.net/morfologik/?rev=20&view=rev Author: milek_pl Date: 2006-09-10 06:05:45 -0700 (Sun, 10 Sep 2006) Log Message: ----------- poprawka znacznika potencjalnej negacji; imies?\197?\130owy uprzednie z form nieregularnych; poprawki i uzupe?\197?\130nienia w s?\197?\130owniku flag Modified Paths: -------------- scripts/Makefile scripts/anot_niereg.awk scripts/morfo_baza.txt scripts/morpher.awk Modified: scripts/Makefile =================================================================== --- scripts/Makefile 2006-08-29 08:51:15 UTC (rev 19) +++ scripts/Makefile 2006-09-10 13:05:45 UTC (rev 20) @@ -38,7 +38,7 @@ test: #formy_ht_3.txt - plik testowy - gawk -f compare.awk formy_ht_3.txt >konflikty.txt +# gawk -f compare.awk formy_ht_3.txt >konflikty.txt grep "##" slownik_regularny.txt >raport.txt gawk -f test_oboczne.awk slownik_regularny.txt >>raport.txt Modified: scripts/anot_niereg.awk =================================================================== --- scripts/anot_niereg.awk 2006-08-29 08:51:15 UTC (rev 19) +++ scripts/anot_niereg.awk 2006-09-10 13:05:45 UTC (rev 20) @@ -20,7 +20,11 @@ { if (wyrazy[$3"\t"$2]!="") { split(wyrazy[$3"\t"$2], znaczniki, ":") - print $1"\t"$2"\t"znaczniki[1]":irreg" } + if ($1"__END"~/[\xB3w]szy__END/) + print $1"\t"$2"\tpant:perf" + else + print $1"\t"$2"\t"znaczniki[1]":irreg" + } else print $1 "\t" $2 "\tqub" } } \ No newline at end of file Modified: scripts/morfo_baza.txt =================================================================== --- scripts/morfo_baza.txt 2006-08-29 08:51:15 UTC (rev 19) +++ scripts/morfo_baza.txt 2006-09-10 13:05:45 UTC (rev 20) @@ -1,5 +1,7 @@ 0 0 adv A A 0 0 subst:sg:nom:f +OSTos o 0 owie [ae]y subst:pl:nom.voc:m1 +MNTo M a ie [^sz]na subst:sg:loc:m1 A A a e [cijl\xBF]a subst:pl:nom.acc.voc:f A A a e wna subst:pl:nom.acc.voc:f A A \xB1d\xBC \xEAdzie \xB1d\xBC subst:pl:nom.acc.voc:f @@ -9,7 +11,7 @@ ACMN C ia ij [^drt]ia subst:pl:gen:f ACMN C ia yj [drt]ia subst:pl:gen:f ACMN C ja yj ja subst:pl:gen:f -ACMN M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen.dat.loc:f +ACMN M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen.dat.loc:f ACMN M a o [^l]a subst:sg:voc:f ACMN M a \xB1 a subst:sg:inst:f ACMN M a \xEA [^w]a subst:sg:acc:f @@ -44,6 +46,7 @@ ALNT A a e [cijl\xBF]a subst:pl:nom.acc.voc:f ALNT ALNT 0 0 subst:sg:nom:m ALNT L a o [^i]a subst:sg:voc:m +ALNT L a u [^\xEA][^w].sia subst:sg:voc:f ALNT L a u [bmoi]cia subst:sg:voc:m ALNT L a \xB1 [ij]a subst:sg:inst:f ALNT L a \xEA [ij]a subst:sg:acc:m @@ -125,6 +128,7 @@ ALNn N a om [^w]a subst:pl:dat:f ALNn n a .a subst:pl:gen:f ALNn n a [^z]a subst:pl:gen:f +ALNn n a a subst:pl:gen:f AM A \xF1 nie \xF1 subst:pl:nom.acc.voc:f AM AM 0 0 subst:sg:nom:f AM M \xF1 ni [^e]\xF1 subst:sg:gen:f @@ -151,14 +155,15 @@ AMN M 0 y [^\xB1]\xBF subst:sg:gen:f AMN M 0 y c subst:sg:gen:f AMN M 0 \xB1 [^\xF3]l subst:sg:inst:f +MNm M 0 \xB1 [yi]ni subst:sg:inst:f AMN M 0 \xB1 c subst:sg:inst:f AMN M 0 \xB1 \xBF subst:sg:inst:f -AMN M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f +AMN M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f AMN M a o [^a][bt]ula subst:sg:voc:f AMN M a o [^bt]ula subst:sg:voc:f AMN M a o [^l]a subst:sg:voc:f AMN M a o [^u]la subst:sg:voc:f -AMN M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +AMN M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f AMN M a \xB1 a subst:sg:inst:f AMN M a \xEA [^w]a subst:sg:acc:f AMN M ew wi [hnt]ew subst:sg:gen:f @@ -166,7 +171,9 @@ AMN M e\xE6 ci [h\xB3]e\xE6 subst:sg:gen:f AMN M e\xE6 ci\xB1 [h\xB3]e\xE6 subst:sg:inst:f AMN M iew wi [gk]iew subst:sg:gen:f +M M iew wi [gk]iew subst:sg:gen:f AMN M iew wi\xB1 [gk]iew subst:sg:inst:f +M M iew wi\xB1 [gk]iew subst:sg:inst:f AMN M ie\xB6 si wie\xB6 subst:sg:gen:f AMN M ie\xB6 si\xB1 wie\xB6 subst:sg:inst:f AMN M \xF3d\xBC odzi \xF3d\xBC subst:sg:gen:f @@ -250,17 +257,20 @@ AMNOT N 0 ami [^\xF3]l subst:pl:inst:f AMNOT N 0 om [^\xF3]l subst:pl:dat:f AMNOT O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m1 +OTZosz O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m1 AMNOT O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m1 +OTZosz O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m1 AMNOT O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m1 -AMNOT O 0 u [cghjkl\xBF] subst:sg:gen.loc.voc:m1 +OTZosz O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m1 +AMNOT O 0 u [cghjkly\xBF] subst:sg:gen.loc.voc:m1 AMNOT T 0 \xF3w [^a\xE6o\xF1\xB6w\xBCx] subst:pl:gen:m1 AMNT A a e [cijl\xBF]a subst:pl:nom.acc.voc:m AMNT AMNT 0 0 subst:sg:nom:m -AMNT M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:m +AMNT M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:m AMNT M a o [^bt]ula subst:sg:voc:m AMNT M a o [^l]a subst:sg:voc:m AMNT M a o [^u]la subst:sg:voc:m -AMNT M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:m +AMNT M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:m AMNT M a \xB1 a subst:sg:inst:f AMNT M a \xEA [^w]a subst:sg:acc:m AMNT N 0 ch [^w]a subst:pl:loc:m @@ -270,7 +280,7 @@ AMNTn A a e [cijl\xBF]a subst:pl:nom.acc.voc:f AMNTn AMNTn 0 0 subst:sg:nom:f AMNTn M a o [^l]a subst:sg:voc:f -AMNTn M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +AMNTn M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f AMNTn M a \xB1 a subst:sg:inst:f AMNTn M a \xEA [^w]a subst:sg:acc:f AMNTn N 0 ch [^w]a subst:pl:loc:f @@ -279,13 +289,14 @@ AMNTn T a \xF3w a subst:pl:gen:f AMNTn n a .a subst:pl:gen:f AMNTn n a [^z]a subst:pl:gen:f +AMNTn n a a subst:pl:gen:f AMNTo A a e [cijl\xBF]a subst:pl:nom.acc.voc:m AMNTo AMNTo 0 0 subst:sg:nom:m1 -AMNTo M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:m +AMNTo M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:m AMNTo M a o [^bt]ula subst:sg:voc:m AMNTo M a o [^l]a subst:sg:voc:m AMNTo M a o [^u]la subst:sg:voc:m -AMNTo M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:m +AMNTo M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:m AMNTo M a \xB1 a subst:sg:inst:m AMNTo M a \xEA [^w]a subst:sg:acc:m AMNTo N 0 ch [^w]a subst:pl:loc:m @@ -298,32 +309,41 @@ AMNm AMNm 0 0 subst:sg:nom:f AMNm M 0 \xB1 [yi]ni subst:sg:inst:f AMNm M 0 \xEA [yi]ni subst:sg:acc:f -AMNm M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f +MNm M 0 \xEA [yi]ni subst:sg:acc:f +AMNm M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f AMNm M a o [^l]a subst:sg:voc:f AMNm M a o [^u]la subst:sg:voc:f -AMNm M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +AMNm M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f AMNm M a \xB1 a subst:sg:inst:f AMNm M a \xEA [^w]a subst:sg:acc:f AMNm N 0 ach [^s]z subst:pl:loc:f +MNm N 0 ach [iy]ni subst:pl:loc:f AMNm N 0 ach [iy]ni subst:pl:loc:f AMNm N 0 ami [^s]z subst:pl:inst:f +MNm N 0 ami [iy]ni subst:pl:inst:f AMNm N 0 ami [iy]ni subst:pl:inst:f AMNm N 0 ch [^w]a subst:pl:loc:f AMNm N 0 e [^cs]z subst:pl:nom.acc.voc:f AMNm N 0 mi [^w]a subst:pl:inst:f AMNm N 0 om [^s]z subst:pl:dat:f +MNm N 0 om [iy]ni subst:pl:dat:f AMNm N 0 om [iy]ni subst:pl:dat:f AMNm N a om [^w]a subst:pl:dat:f AMNm m ca iec [^o]ca subst:pl:gen:f AMNm m la el [^o]la subst:pl:gen:f AMNm m ni \xF1 ni subst:pl:gen:f +MNm m ni \xF1 ni subst:pl:gen:f AMNm m ola \xF3l ola subst:pl:gen:f +MNmn n a a subst:pl:gen:f +MNn n a a subst:pl:gen:f +MNnq n a a subst:pl:gen:f +MSTn n a a subst:pl:gen:f AMNmn A a e [cijl\xBF]a subst:pl:nom.acc.voc:f AMNmn AMNmn 0 0 subst:sg:nom:f -AMNmn M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f +AMNmn M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f AMNmn M a o [^l]a subst:sg:voc:f AMNmn M a o [^u]la subst:sg:voc:f -AMNmn M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +AMNmn M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f AMNmn M a \xB1 a subst:sg:inst:f AMNmn M a \xEA [^w]a subst:sg:acc:f AMNmn N 0 ch [^w]a subst:pl:loc:f @@ -334,9 +354,10 @@ AMNmn m \xBFa e\xBF [^\xF3]\xBFa subst:pl:gen:f AMNmn n a .a subst:pl:gen:f AMNmn n a [^z]a subst:pl:gen:f +AMNmn n a a subst:pl:gen:f AMNn A a e [cijl\xBF]a subst:pl:nom.acc.voc:f AMNn AMNn 0 0 subst:sg:nom:f -AMNn M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f +AMNn M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f AMNn M a o [^a][bt]ula subst:sg:voc:f AMNn M a o [^b]abula subst:sg:voc:f AMNn M a o [^bt]ula subst:sg:voc:f @@ -344,7 +365,7 @@ AMNn M a o [^u]la subst:sg:voc:f AMNn M a u babula subst:sg:voc:f AMNn M a u matula subst:sg:voc:f -AMNn M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +AMNn M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f AMNn M a \xB1 a subst:sg:inst:f AMNn M a \xEA [^w]a subst:sg:acc:f AMNn N 0 ch [^o]wa subst:pl:loc:f @@ -354,9 +375,10 @@ AMNn N a om [^w]a subst:pl:dat:f AMNn n a .a subst:pl:gen:f AMNn n a [^z]a subst:pl:gen:f +AMNn n a a subst:pl:gen:f AMNo A a e [cijl\xBF]a subst:pl:nom.voc:m1 AMNo AMNo 0 0 subst:sg:nom:m1 -AMNo M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen.dat.loc:m1+subst:pl:acc.gen:m1 +AMNo M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen.dat.loc:m1+subst:pl:acc.gen:m1 AMNo M a o [^l]a subst:sg:voc:m1 AMNo M a \xB1 a subst:sg:inst:m1 AMNo M a \xEA [^w]a subst:sg:acc:m1 @@ -366,10 +388,10 @@ AMNo o a owie a subst:pl:nom.voc:m1 AMST A a e [cijl\xBF]a subst:pl:nom.acc.voc:f AMST AMST 0 0 subst:sg:nom:m -AMST M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:m +AMST M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:m AMST M a o [^l]a subst:sg:voc:m AMST M a o [^u]la subst:sg:voc:m -AMST M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:m +AMST M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:m AMST M a \xB1 a subst:sg:inst:m AMST M a \xEA [^w]a subst:sg:acc:m AMST S 0 ch a subst:pl:loc:m @@ -399,6 +421,7 @@ ANTn T a \xF3w a subst:pl:gen:m ANTn n a .a subst:sg:gen.loc:f ANTn n a [^z]a subst:sg:gen.dat.loc:m +ANTn n a a subst:pl:gen:f ANTo A \xE6 cie [^e]\xE6 subst:pl:nom.acc.voc:m ANTo ANTo 0 0 subst:sg:nom:m ANTo N \xE6 ciach [^e]\xE6 subst:pl:loc:m @@ -424,6 +447,7 @@ ANmn m zia \xBC zia subst:pl:gen:f ANmn n a .a subst:sg:gen.loc:f ANmn n a [^z]a subst:sg:gen.dat.loc:f +ANmn n a a subst:pl:gen:f ANn A a e [cijl\xBF]a subst:pl:nom.acc.voc:f ANn ANn 0 0 subst:sg:nom:f ANn N 0 ch [^w]a subst:pl:loc:f @@ -431,6 +455,7 @@ ANn N a om [^w]a subst:pl:dat:f ANn n a .a subst:sg:gen.loc:f ANn n a [^z]a subst:sg:gen.dat.loc:f +ANn n a a subst:pl:gen:f BEFGHIej B \xB1\xE6 ij [^iosuyz]n\xB1\xE6 verb:impt:sg:sec:perf BEFGHIej B \xB1\xE6 ijcie [^iosuyz]n\xB1\xE6 verb:impt:pl:sec:perf BEFGHIej B \xB1\xE6 ijcie\xBF [^iosuyz]n\xB1\xE6 verb:impt:pl:sec:perf @@ -480,101 +505,132 @@ BEFGHIej F \xE6 \xB3em [^dsz]n\xB1\xE6 verb:praet:sg:pri:m:?perf BEFGHIej F \xE6 \xB3e\xB6 [^dsz]n\xB1\xE6 verb:praet:sg:sec:m:?perf BEFGHIej G n\xB1\xE6 li [aei\xB3ry][bkpt]n\xB1\xE6 adj:pl:nom.voc:m +BEFGHIej G n\xB1\xE6 li [e\xEAisuz]chn\xB1\xE6 adj:pl:nom.voc:m1 BEFGHIej G n\xB1\xE6 li [ly]gn\xB1\xE6 adj:pl:nom.voc:m1 BEFGHIej G n\xB1\xE6 li [\xB1\xEAl]kn\xB1\xE6 adj:pl:nom.voc:m1 BEFGHIej G n\xB1\xE6 li \xEA[bd]n\xB1\xE6 adj:pl:nom.voc:m1 BEFGHIej G n\xB1\xE6 \xB3a [aei\xB3ry][bkptz]n\xB1\xE6 adj:sg:nom:f +BEFGHIej G n\xB1\xE6 \xB3a [e\xEAisuz]chn\xB1\xE6 adj:sg:nom:f BEFGHIej G n\xB1\xE6 \xB3a [ly]gn\xB1\xE6 adj:sg:nom:f BEFGHIej G n\xB1\xE6 \xB3a [\xB1\xEAl]kn\xB1\xE6 adj:sg:nom:f BEFGHIej G n\xB1\xE6 \xB3a \xEA[bd]n\xB1\xE6 adj:sg:nom:f BEFGHIej G n\xB1\xE6 \xB3e [aei\xB3ry][bkptz]n\xB1\xE6 adj:sg:nom.acc.voc:sg:n+adj:nom.acc.voc:pl:f.n +BEFGHIej G n\xB1\xE6 \xB3e [e\xEAisuz]chn\xB1\xE6 adj:sg:nom.acc.voc:sg:n+adj:nom.acc.voc:pl:f.n BEFGHIej G n\xB1\xE6 \xB3e [ly]gn\xB1\xE6 adj:sg:nom.acc.voc:sg:n+adj:nom.acc.voc:pl:f.n BEFGHIej G n\xB1\xE6 \xB3e [\xB1\xEAl]kn\xB1\xE6 adj:sg:nom.acc.voc:sg:n+adj:nom.acc.voc:pl:f.n BEFGHIej G n\xB1\xE6 \xB3e \xEA[bd]n\xB1\xE6 adj:sg:nom.acc.voc:sg:n+adj:nom.acc.voc:pl:f.n BEFGHIej G n\xB1\xE6 \xB3ego [aei\xB3ry][bkptz]n\xB1\xE6 adj:sg:gen:m.n +BEFGHIej G n\xB1\xE6 \xB3ego [e\xEAisuz]chn\xB1\xE6 adj:sg:gen:m.n BEFGHIej G n\xB1\xE6 \xB3ego [ly]gn\xB1\xE6 adj:sg:gen:m.n BEFGHIej G n\xB1\xE6 \xB3ego [\xB1\xEAl]kn\xB1\xE6 adj:sg:gen:m.n BEFGHIej G n\xB1\xE6 \xB3ego \xEA[bd]n\xB1\xE6 adj:sg:gen:m.n BEFGHIej G n\xB1\xE6 \xB3ej [aei\xB3ry][bkptz]n\xB1\xE6 adj:sg:gen.dat.loc:f +BEFGHIej G n\xB1\xE6 \xB3ej [e\xEAisuz]chn\xB1\xE6 adj:sg:gen.dat.loc:f BEFGHIej G n\xB1\xE6 \xB3ej [ly]gn\xB1\xE6 adj:sg:gen.dat.loc:f BEFGHIej G n\xB1\xE6 \xB3ej [\xB1\xEAl]kn\xB1\xE6 adj:sg:gen.dat.loc:f BEFGHIej G n\xB1\xE6 \xB3ej \xEA[bd]n\xB1\xE6 adj:sg:gen.dat.loc:f BEFGHIej G n\xB1\xE6 \xB3emu [aei\xB3ry][bkptz]n\xB1\xE6 adj:sg:gen.dat:m.n +BEFGHIej G n\xB1\xE6 \xB3emu [e\xEAisuz]chn\xB1\xE6 adj:sg:gen.dat:m.n BEFGHIej G n\xB1\xE6 \xB3emu [ly]gn\xB1\xE6 adj:sg:gen.dat:m.n BEFGHIej G n\xB1\xE6 \xB3emu [\xB1\xEAl]kn\xB1\xE6 adj:sg:gen.dat:m.n BEFGHIej G n\xB1\xE6 \xB3emu \xEA[bd]n\xB1\xE6 adj:sg:gen.dat:m.n BEFGHIej G n\xB1\xE6 \xB3y [aei\xB3ry][bkptz]n\xB1\xE6 adj:sg:nom.voc:m +BEFGHIej G n\xB1\xE6 \xB3y [e\xEAisuz]chn\xB1\xE6 adj:sg:nom.voc:m BEFGHIej G n\xB1\xE6 \xB3y [ly]gn\xB1\xE6 adj:sg:nom.voc:m BEFGHIej G n\xB1\xE6 \xB3y [\xB1\xEAl]kn\xB1\xE6 adj:sg:nom.voc:m BEFGHIej G n\xB1\xE6 \xB3y \xEA[bd]n\xB1\xE6 adj:sg:nom.voc:m BEFGHIej G n\xB1\xE6 \xB3ych [aei\xB3ry][bkptz]n\xB1\xE6 adj:pl:acc.gen.loc:m1+adj:pl:gen.loc:n +BEFGHIej G n\xB1\xE6 \xB3ych [e\xEAisuz]chn\xB1\xE6 adj:pl:acc.gen.loc:m1+adj:pl:gen.loc:n BEFGHIej G n\xB1\xE6 \xB3ych [ly]gn\xB1\xE6 adj:pl:acc.gen.loc:m1+adj:pl:gen.loc:n BEFGHIej G n\xB1\xE6 \xB3ych [\xB1\xEAl]kn\xB1\xE6 adj:pl:acc.gen.loc:m1+adj:pl:gen.loc:n BEFGHIej G n\xB1\xE6 \xB3ych \xEA[bd]n\xB1\xE6 adj:pl:acc.gen.loc:m1+adj:pl:gen.loc:n BEFGHIej G n\xB1\xE6 \xB3ym [aei\xB3ry][bkptz]n\xB1\xE6 adj:sg:inst.loc:m.n+adj:pl:dat:m.n +BEFGHIej G n\xB1\xE6 \xB3ym [e\xEAisuz]chn\xB1\xE6 adj:sg:inst.loc:m.n+adj:pl:dat:m.n BEFGHIej G n\xB1\xE6 \xB3ym [ly]gn\xB1\xE6 adj:sg:inst.loc:m.n+adj:pl:dat:m.n BEFGHIej G n\xB1\xE6 \xB3ym [\xB1\xEAl]kn\xB1\xE6 adj:sg:inst.loc:m.n+adj:pl:dat:m.n BEFGHIej G n\xB1\xE6 \xB3ym \xEA[bd]n\xB1\xE6 adj:sg:inst.loc:m.n+adj:pl:dat:m.n BEFGHIej G n\xB1\xE6 \xB3ymi [aei\xB3ry][bkptz]n\xB1\xE6 adj:pl:inst:f.m.n +BEFGHIej G n\xB1\xE6 \xB3ymi [e\xEAisuz]chn\xB1\xE6 adj:pl:inst:f.m.n BEFGHIej G n\xB1\xE6 \xB3ymi [ly]gn\xB1\xE6 adj:pl:inst:f.m.n BEFGHIej G n\xB1\xE6 \xB3ymi [\xB1\xEAl]kn\xB1\xE6 adj:pl:inst:f.m.n BEFGHIej G n\xB1\xE6 \xB3ymi \xEA[bd]n\xB1\xE6 adj:pl:inst:f.m.n BEFGHIej G n\xB1\xE6 \xB3\xB1 [aei\xB3ry][bkptz]n\xB1\xE6 adj:sg:acc.inst:f +BEFGHIej G n\xB1\xE6 \xB3\xB1 [e\xEAisuz]chn\xB1\xE6 adj:sg:acc.inst:f BEFGHIej G n\xB1\xE6 \xB3\xB1 [ly]gn\xB1\xE6 adj:sg:acc.inst:f BEFGHIej G n\xB1\xE6 \xB3\xB1 [\xB1\xEAl]kn\xB1\xE6 adj:sg:acc.inst:f BEFGHIej G n\xB1\xE6 \xB3\xB1 \xEA[bd]n\xB1\xE6 adj:sg:acc.inst:f BEFGHIej H n\xB1\xE6 li [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:pl:ter:m1:?perf +BEFGHIej H n\xB1\xE6 li [^s]chn\xB1\xE6 verb:praet:pl:ter:m1:?perf BEFGHIej H n\xB1\xE6 li a[kp]n\xB1\xE6 verb:praet:pl:ter:m1:?perf BEFGHIej H n\xB1\xE6 li \xEAbn\xB1\xE6 verb:praet:pl:ter:m1:?perf BEFGHIej H n\xB1\xE6 liby [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:pl:ter:m1:?perf +BEFGHIej H n\xB1\xE6 liby [^s]chn\xB1\xE6 verb:aglt:praet:pl:ter:m1:?perf BEFGHIej H n\xB1\xE6 liby a[kp]n\xB1\xE6 verb:aglt:praet:pl:ter:m1:?perf BEFGHIej H n\xB1\xE6 liby \xEAbn\xB1\xE6 verb:aglt:praet:pl:ter:m1:?perf BEFGHIej H n\xB1\xE6 liby\xB6cie [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:pl:sec:m1:?perf +BEFGHIej H n\xB1\xE6 liby\xB6cie [^s]chn\xB1\xE6 verb:aglt:praet:pl:sec:m1:?perf BEFGHIej H n\xB1\xE6 liby\xB6cie a[kp]n\xB1\xE6 verb:aglt:praet:pl:sec:m1:?perf BEFGHIej H n\xB1\xE6 liby\xB6cie \xEAbn\xB1\xE6 verb:aglt:praet:pl:sec:m1:?perf BEFGHIej H n\xB1\xE6 liby\xB6my [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:pl:pri:m1:?perf +BEFGHIej H n\xB1\xE6 liby\xB6my [^s]chn\xB1\xE6 verb:aglt:praet:pl:pri:m1:?perf BEFGHIej H n\xB1\xE6 liby\xB6my a[kp]n\xB1\xE6 verb:aglt:praet:pl:pri:m1:?perf BEFGHIej H n\xB1\xE6 liby\xB6my \xEAbn\xB1\xE6 verb:aglt:praet:pl:pri:m1:?perf BEFGHIej H n\xB1\xE6 li\xB6cie [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:pl:sec:m1:?perf +BEFGHIej H n\xB1\xE6 li\xB6cie [^s]chn\xB1\xE6 verb:praet:pl:sec:m1:?perf BEFGHIej H n\xB1\xE6 li\xB6cie a[kp]n\xB1\xE6 verb:praet:pl:sec:m1:?perf BEFGHIej H n\xB1\xE6 li\xB6cie \xEAbn\xB1\xE6 verb:praet:pl:sec:m1:?perf BEFGHIej H n\xB1\xE6 li\xB6my [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:pl:pri:m1:?perf +BEFGHIej H n\xB1\xE6 li\xB6my [^s]chn\xB1\xE6 verb:praet:pl:pri:m1:?perf BEFGHIej H n\xB1\xE6 li\xB6my a[kp]n\xB1\xE6 verb:praet:pl:pri:m1:?perf BEFGHIej H n\xB1\xE6 li\xB6my \xEAbn\xB1\xE6 verb:praet:pl:pri:m1:?perf BEFGHIej H n\xB1\xE6 \xB3 [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:sg:ter:m:?perf +BEFGHIej H n\xB1\xE6 \xB3 [^s]chn\xB1\xE6 verb:praet:sg:ter:m:?perf BEFGHIej H n\xB1\xE6 \xB3 a[kp]n\xB1\xE6 verb:praet:sg:ter:m:?perf BEFGHIej H n\xB1\xE6 \xB3a [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:sg:ter:f:?perf +BEFGHIej H n\xB1\xE6 \xB3a [^s]chn\xB1\xE6 verb:praet:sg:ter:f:?perf BEFGHIej H n\xB1\xE6 \xB3a a[kp]n\xB1\xE6 verb:praet:sg:ter:f:?perf BEFGHIej H n\xB1\xE6 \xB3a \xEAbn\xB1\xE6 verb:praet:sg:ter:f:?perf BEFGHIej H n\xB1\xE6 \xB3aby [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:sg:ter:f:?perf +BEFGHIej H n\xB1\xE6 \xB3aby [^s]chn\xB1\xE6 verb:aglt:praet:sg:ter:f:?perf BEFGHIej H n\xB1\xE6 \xB3aby a[kp]n\xB1\xE6 verb:aglt:praet:sg:ter:f:?perf BEFGHIej H n\xB1\xE6 \xB3aby \xEAbn\xB1\xE6 verb:aglt:praet:sg:ter:f:?perf BEFGHIej H n\xB1\xE6 \xB3abym [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:sg:pri:f:?perf +BEFGHIej H n\xB1\xE6 \xB3abym [^s]chn\xB1\xE6 verb:aglt:praet:sg:pri:f:?perf BEFGHIej H n\xB1\xE6 \xB3abym a[kp]n\xB1\xE6 verb:aglt:praet:sg:pri:f:?perf BEFGHIej H n\xB1\xE6 \xB3abym \xEAbn\xB1\xE6 verb:aglt:praet:sg:pri:f:?perf BEFGHIej H n\xB1\xE6 \xB3aby\xB6 [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:sg:sec:f:?perf +BEFGHIej H n\xB1\xE6 \xB3aby\xB6 [^s]chn\xB1\xE6 verb:aglt:praet:sg:sec:f:?perf BEFGHIej H n\xB1\xE6 \xB3aby\xB6 a[kp]n\xB1\xE6 verb:aglt:praet:sg:sec:f:?perf BEFGHIej H n\xB1\xE6 \xB3aby\xB6 \xEAbn\xB1\xE6 verb:aglt:praet:sg:sec:f:?perf BEFGHIej H n\xB1\xE6 \xB3am [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:sg:pri:f:?perf +BEFGHIej H n\xB1\xE6 \xB3am [^s]chn\xB1\xE6 verb:praet:sg:pri:f:?perf BEFGHIej H n\xB1\xE6 \xB3am a[kp]n\xB1\xE6 verb:praet:sg:pri:f:?perf BEFGHIej H n\xB1\xE6 \xB3am \xEAbn\xB1\xE6 verb:praet:sg:pri:f:?perf BEFGHIej H n\xB1\xE6 \xB3a\xB6 [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:sg:sec:f:?perf +BEFGHIej H n\xB1\xE6 \xB3a\xB6 [^s]chn\xB1\xE6 verb:praet:sg:sec:f:?perf BEFGHIej H n\xB1\xE6 \xB3a\xB6 a[kp]n\xB1\xE6 verb:praet:sg:sec:f:?perf BEFGHIej H n\xB1\xE6 \xB3a\xB6 \xEAbn\xB1\xE6 verb:praet:sg:sec:f:?perf BEFGHIej H n\xB1\xE6 \xB3by [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:sg:ter:m:?perf +BEFGHIej H n\xB1\xE6 \xB3by [^s]chn\xB1\xE6 verb:aglt:praet:sg:ter:m:?perf BEFGHIej H n\xB1\xE6 \xB3by a[kp]n\xB1\xE6 verb:aglt:praet:sg:ter:m:?perf BEFGHIej H n\xB1\xE6 \xB3bym [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:sg:pri:m:?perf +BEFGHIej H n\xB1\xE6 \xB3bym [^s]chn\xB1\xE6 verb:aglt:praet:sg:pri:m:?perf BEFGHIej H n\xB1\xE6 \xB3bym a[kp]n\xB1\xE6 verb:aglt:praet:sg:pri:m:?perf BEFGHIej H n\xB1\xE6 \xB3by\xB6 [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:sg:sec:m:?perf +BEFGHIej H n\xB1\xE6 \xB3by\xB6 [^s]chn\xB1\xE6 verb:aglt:praet:sg:sec:m:?perf BEFGHIej H n\xB1\xE6 \xB3by\xB6 a[kp]n\xB1\xE6 verb:aglt:praet:sg:sec:m:?perf BEFGHIej H n\xB1\xE6 \xB3em [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:sg:pri:m:?perf +BEFGHIej H n\xB1\xE6 \xB3em [^s]chn\xB1\xE6 verb:praet:sg:pri:m:?perf BEFGHIej H n\xB1\xE6 \xB3em a[kp]n\xB1\xE6 verb:praet:sg:pri:m:?perf BEFGHIej H n\xB1\xE6 \xB3e\xB6 [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:sg:sec:m:?perf +BEFGHIej H n\xB1\xE6 \xB3e\xB6 [^s]chn\xB1\xE6 verb:praet:sg:sec:m:?perf BEFGHIej H n\xB1\xE6 \xB3e\xB6 a[kp]n\xB1\xE6 verb:praet:sg:sec:m:?perf BEFGHIej H n\xB1\xE6 \xB3o [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:sg:ter:n:?perf +BEFGHIej H n\xB1\xE6 \xB3o [^s]chn\xB1\xE6 verb:praet:sg:ter:n:?perf BEFGHIej H n\xB1\xE6 \xB3o a[kp]n\xB1\xE6 verb:praet:sg:ter:n:?perf BEFGHIej H n\xB1\xE6 \xB3o \xEAbn\xB1\xE6 verb:praet:sg:ter:n:?perf BEFGHIej H n\xB1\xE6 \xB3oby [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:sg:ter:n:?perf +BEFGHIej H n\xB1\xE6 \xB3oby [^s]chn\xB1\xE6 verb:aglt:praet:sg:ter:n:?perf BEFGHIej H n\xB1\xE6 \xB3oby a[kp]n\xB1\xE6 verb:aglt:praet:sg:ter:n:?perf BEFGHIej H n\xB1\xE6 \xB3oby \xEAbn\xB1\xE6 verb:aglt:praet:sg:ter:n:?perf BEFGHIej H n\xB1\xE6 \xB3obym [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:sg:pri:n:?perf @@ -590,21 +646,27 @@ BEFGHIej H n\xB1\xE6 \xB3o\xB6 a[kp]n\xB1\xE6 verb:praet:sg:sec:n:?perf BEFGHIej H n\xB1\xE6 \xB3o\xB6 \xEAbn\xB1\xE6 verb:praet:sg:sec:n:?perf BEFGHIej H n\xB1\xE6 \xB3y [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:sg:ter:f.n:?perf +BEFGHIej H n\xB1\xE6 \xB3y [^s]chn\xB1\xE6 verb:praet:sg:ter:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3y a[kp]n\xB1\xE6 verb:praet:sg:ter:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3y \xEAbn\xB1\xE6 verb:praet:sg:ter:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:pl:ter:f.n:?perf +BEFGHIej H n\xB1\xE6 \xB3yby [^s]chn\xB1\xE6 verb:aglt:praet:pl:ter:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby a[kp]n\xB1\xE6 verb:aglt:praet:pl:ter:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby \xEAbn\xB1\xE6 verb:aglt:praet:pl:ter:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby\xB6cie [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:pl:sec:f.n:?perf +BEFGHIej H n\xB1\xE6 \xB3yby\xB6cie [^s]chn\xB1\xE6 verb:aglt:praet:pl:sec:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby\xB6cie a[kp]n\xB1\xE6 verb:aglt:praet:pl:sec:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby\xB6cie \xEAbn\xB1\xE6 verb:aglt:praet:pl:sec:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby\xB6my [^a\xEAo][^hsz]n\xB1\xE6 verb:aglt:praet:pl:pri:f.n:?perf +BEFGHIej H n\xB1\xE6 \xB3yby\xB6my [^s]chn\xB1\xE6 verb:aglt:praet:pl:pri:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby\xB6my a[kp]n\xB1\xE6 verb:aglt:praet:pl:pri:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3yby\xB6my \xEAbn\xB1\xE6 verb:aglt:praet:pl:pri:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3y\xB6cie [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:pl:sec:f.n:?perf +BEFGHIej H n\xB1\xE6 \xB3y\xB6cie [^s]chn\xB1\xE6 verb:praet:pl:sec:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3y\xB6cie a[kp]n\xB1\xE6 verb:praet:pl:sec:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3y\xB6cie \xEAbn\xB1\xE6 verb:praet:pl:sec:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3y\xB6my [^a\xEAo][^hsz]n\xB1\xE6 verb:praet:pl:pri:f.n:?perf +BEFGHIej H n\xB1\xE6 \xB3y\xB6my [^s]chn\xB1\xE6 verb:praet:pl:pri:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3y\xB6my a[kp]n\xB1\xE6 verb:praet:pl:pri:f.n:?perf BEFGHIej H n\xB1\xE6 \xB3y\xB6my \xEAbn\xB1\xE6 verb:praet:pl:pri:f.n:?perf BEFGHIej H \xEAbn\xB1\xE6 \xB1b\xB3 \xEAbn\xB1\xE6 verb:praet:sg:ter:m:?perf @@ -2102,6 +2164,12 @@ BEGHIej H \xE6 liby\xB6my [^rz]e\xE6 verb:aglt:praet:pl:pri:m1:?perf BEGHIej H \xE6 li\xB6cie [^rz]e\xE6 verb:praet:pl:sec:m1:?perf BEGHIej H \xE6 li\xB6my [^rz]e\xE6 verb:praet:pl:pri:m1:?perf +HIej H \xE6 li [abjot]rze\xE6 verb:praet:pl:ter:m1:?perf +HIej H \xE6 liby [abjot]rze\xE6 verb:aglt:praet:pl:ter:m1:?perf +HIej H \xE6 liby\xB6cie [abjot]rze\xE6 verb:aglt:praet:pl:sec:m1:?perf +HIej H \xE6 liby\xB6my [abjot]rze\xE6 verb:aglt:praet:pl:pri:m1:?perf +HIej H \xE6 li\xB6cie [abjot]rze\xE6 verb:praet:pl:sec:m1:?perf +HIej H \xE6 li\xB6my [abjot]rze\xE6 verb:praet:pl:pri:m1:?perf BEGHIej H \xEAbn\xB1\xE6 \xB1b\xB3 \xEAbn\xB1\xE6 verb:praet:sg:ter:m:?perf BEGHIej H \xEAbn\xB1\xE6 \xB1b\xB3by \xEAbn\xB1\xE6 verb:aglt:praet:sg:ter:m:?perf BEGHIej H \xEAbn\xB1\xE6 \xB1b\xB3bym \xEAbn\xB1\xE6 verb:aglt:praet:sg:pri:m:?perf @@ -4975,7 +5043,7 @@ BEHIej j \xE6 niem [^\xB1ei\xB6uy\xBC]\xE6 subst:ger:sg:inst:n BEHIej j \xE6 niom [^\xB1ei\xB6uy\xBC]\xE6 subst:ger:pl:dat:n BEHIej j \xE6 niu [^\xB1ei\xB6uy\xBC]\xE6 subst:ger:sg:dat.loc:n -BEHIej j \xE6 \xE6 [uy]\xE6 verb:inf:perf +BEHIej j \xE6 \xE6 [uy]\xE6 subst:ger:pl:gen:n BEHIej j \xE6 \xF1 [^\xB1ei\xB6uy\xBC]\xE6 subst:ger:pl:gen:n BEHJdi B a\xE6 [bp]a\xE6 verb:impt:sg:sec:?perf BEHJdi B a\xE6 ja\xE6 verb:impt:sg:sec:?perf @@ -6133,7 +6201,7 @@ BEHJej j \xE6 niem [^\xB1ei\xB6uy\xBC]\xE6 subst:ger:sg:inst:n BEHJej j \xE6 niom [^\xB1ei\xB6uy\xBC]\xE6 subst:ger:pl:dat:n BEHJej j \xE6 niu [^\xB1ei\xB6uy\xBC]\xE6 subst:ger:sg:dat.loc:n -BEHJej j \xE6 \xE6 [uy]\xE6 verb:inf:perf+verb:sg:ter:?perf+verb:sg:pri:?perf +BEHJej j \xE6 \xE6 [uy]\xE6 subst:ger:pl:gen:n BEHJej j \xE6 \xF1 [^\xB1ei\xB6uy\xBC]\xE6 subst:ger:pl:gen:n BEHJej j \xBC\xE6 zienia \xBC\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n BEHJej j \xBC\xE6 zieniach \xBC\xE6 subst:ger:pl:loc:n @@ -8405,38 +8473,49 @@ BGHIdi d e\xE6 ano [^cz]ie\xE6 verb:imps BGHIdi d e\xE6 ano [^irz]e\xE6 verb:imps BGHIdi d e\xE6 ano [cs]ze\xE6 verb:imps +BHdi d e\xE6 ano [cs]ze\xE6 verb:imps BGHIdi d e\xE6 ano zie\xE6 verb:imps BGHIdi i \xE6 nia [^cz]i[ae]\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n BGHIdi i \xE6 nia [^irz]e\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n BGHIdi i \xE6 nia [cs]ze\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n +BHdi i \xE6 nia [cs]ze\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n BGHIdi i \xE6 nia zie\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n BGHIdi i \xE6 niach [^cz]i[ae]\xE6 subst:ger:pl:loc:n BGHIdi i \xE6 niach [^irz]e\xE6 subst:ger:pl:loc:n BGHIdi i \xE6 niach [cs]ze\xE6 subst:ger:pl:loc:n +BHdi i \xE6 niach [cs]ze\xE6 subst:ger:pl:loc:n +BHdi i \xE6 niach [cs]ze\xE6 subst:ger:pl:loc:n BGHIdi i \xE6 niach zie\xE6 subst:ger:pl:loc:n BGHIdi i \xE6 niami [^cz]i[ae]\xE6 subst:ger:pl:inst:n BGHIdi i \xE6 niami [^irz]e\xE6 subst:ger:pl:inst:n BGHIdi i \xE6 niami [cs]ze\xE6 subst:ger:pl:inst:n +BHdi i \xE6 niami [cs]ze\xE6 subst:ger:pl:inst:n +BHdi i \xE6 niami [cs]ze\xE6 subst:ger:pl:inst:n BGHIdi i \xE6 niami zie\xE6 subst:ger:pl:inst:n BGHIdi i \xE6 nie [^cz]i[ae]\xE6 subst:ger:sg:nom.acc.voc:n BGHIdi i \xE6 nie [^irz]e\xE6 subst:ger:sg:nom.acc.voc:n BGHIdi i \xE6 nie [cs]ze\xE6 subst:ger:sg:nom.acc.voc:n +BHdi i \xE6 nie [cs]ze\xE6 subst:ger:sg:nom.acc.voc:n BGHIdi i \xE6 nie zie\xE6 subst:ger:sg:nom.acc.voc:n BGHIdi i \xE6 niem [^cz]i[ae]\xE6 subst:ger:pl:loc:n+subst:ger:sg:inst:n BGHIdi i \xE6 niem [^irz]e\xE6 subst:ger:sg:inst:n BGHIdi i \xE6 niem [cs]ze\xE6 subst:ger:sg:inst:n +BHdi i \xE6 niem [cs]ze\xE6 subst:ger:sg:inst:n BGHIdi i \xE6 niem zie\xE6 subst:ger:sg:inst:n BGHIdi i \xE6 niom [^cz]i[ae]\xE6 subst:ger:pl:dat:n BGHIdi i \xE6 niom [^irz]e\xE6 subst:ger:pl:dat:n BGHIdi i \xE6 niom [cs]ze\xE6 subst:ger:pl:dat:n +BHdi i \xE6 niom [cs]ze\xE6 subst:ger:pl:dat:n BGHIdi i \xE6 niom zie\xE6 subst:ger:pl:dat:n BGHIdi i \xE6 niu [^cz]i[ae]\xE6 subst:ger:pl:inst:n+subst:ger:sg:dat.loc:n BGHIdi i \xE6 niu [^irz]e\xE6 subst:ger:sg:dat.loc:n BGHIdi i \xE6 niu [cs]ze\xE6 subst:ger:sg:dat.loc:n +BHdi i \xE6 niu [cs]ze\xE6 subst:ger:sg:dat.loc:n BGHIdi i \xE6 niu zie\xE6 subst:ger:sg:dat.loc:n BGHIdi i \xE6 \xF1 [^cz]i[ae]\xE6 subst:ger:pl:gen:n BGHIdi i \xE6 \xF1 [^irz]e\xE6 subst:ger:pl:gen:n BGHIdi i \xE6 \xF1 [cs]ze\xE6 subst:ger:pl:gen:n +BHdi i \xE6 \xF1 [cs]ze\xE6 subst:ger:pl:gen:n BGHIdi i \xE6 \xF1 zie\xE6 subst:ger:pl:gen:n BGHIdj B \xE6 j ie\xE6 verb:impt:sg:sec:perf BGHIdj B \xE6 jcie ie\xE6 verb:impt:pl:sec:perf @@ -9746,6 +9825,12 @@ BGHdi H \xE6 liby\xB6my [^r]ze\xE6 verb:aglt:praet:pl:pri:m1:?perf BGHdi H \xE6 li\xB6cie [^r]ze\xE6 verb:praet:pl:sec:m1:?perf BGHdi H \xE6 li\xB6my [^r]ze\xE6 verb:praet:pl:pri:m1:?perf +BHdi H \xE6 li [^r]ze\xE6 verb:praet:pl:ter:m1:?perf +BHdi H \xE6 liby [^r]ze\xE6 verb:aglt:praet:pl:ter:m1:?perf +BHdi H \xE6 liby\xB6cie [^r]ze\xE6 verb:aglt:praet:pl:sec:m1:?perf +BHdi H \xE6 liby\xB6my [^r]ze\xE6 verb:aglt:praet:pl:pri:m1:?perf +BHdi H \xE6 li\xB6cie [^r]ze\xE6 verb:praet:pl:sec:m1:?perf +BHdi H \xE6 li\xB6my [^r]ze\xE6 verb:praet:pl:pri:m1:?perf BGHdi d e\xE6 ano [cs]ze\xE6 verb:imps BGHdi i \xE6 nia [cs]ze\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n BGHdi i \xE6 niach [cs]ze\xE6 subst:ger:pl:loc:n @@ -14517,6 +14602,12 @@ BHdhi i \xE6 \xF1 [cs]ze\xE6 subst:ger:pl:gen:n BHdhi i \xE6 \xF1 zie\xE6 subst:ger:pl:gen:n BHdhi i \xE6 \xF1 \xB6cie\xE6 subst:ger:pl:gen:n +BHdi B e\xE6 ej [cs]ze\xE6 verb:impt:sg:sec:perf +BHdi B e\xE6 ejcie [cs]ze\xE6 verb:impt:pl:sec:perf +BHdi B e\xE6 ejcie\xBF [cs]ze\xE6 verb:impt:pl:sec:perf +BHdi B e\xE6 ejmy [cs]ze\xE6 verb:impt:pl:pri:perf +BHdi B e\xE6 ejmy\xBF [cs]ze\xE6 verb:impt:pl:pri:perf +BHdi B e\xE6 ej\xBFe [cs]ze\xE6 verb:impt:sg:sec:perf BHdi B \xE6 j ie\xE6 verb:impt:sg:sec:?perf BHdi B \xE6 jcie ie\xE6 verb:impt:pl:sec:perf BHdi B \xE6 jcie\xBF ie\xE6 verb:impt:pl:sec:perf @@ -14524,25 +14615,49 @@ BHdi B \xE6 jmy\xBF ie\xE6 verb:impt:pl:pri:perf BHdi B \xE6 j\xBFe ie\xE6 verb:impt:sg:sec:perf BHdi BHdi 0 0 verb:inf:?perf +BHdi H e\xE6 a\xB3 [^r]ze\xE6 verb:praet:sg:ter:m:?perf BHdi H e\xE6 a\xB3 [^rz]e\xE6 verb:praet:sg:ter:m:?perf +BHdi H e\xE6 a\xB3a [^r]ze\xE6 verb:praet:sg:ter:f:?perf BHdi H e\xE6 a\xB3a [^rz]e\xE6 verb:praet:sg:ter:f:?perf +BHdi H e\xE6 a\xB3aby [^r]ze\xE6 verb:aglt:praet:sg:ter:f:?perf BHdi H e\xE6 a\xB3aby [^rz]e\xE6 verb:aglt:praet:sg:ter:f:?perf +BHdi H e\xE6 a\xB3abym [^r]ze\xE6 verb:aglt:praet:sg:pri:f:?perf BHdi H e\xE6 a\xB3abym [^rz]e\xE6 verb:aglt:praet:sg:pri:f:?perf +BHdi H e\xE6 a\xB3aby\xB6 [^r]ze\xE6 verb:aglt:praet:sg:sec:f:?perf BHdi H e\xE6 a\xB3aby\xB6 [^rz]e\xE6 verb:aglt:praet:sg:sec:f:?perf +BHdi H e\xE6 a\xB3am [^r]ze\xE6 verb:praet:sg:pri:f:?perf BHdi H e\xE6 a\xB3am [^rz]e\xE6 verb:praet:sg:pri:f:?perf +BHdi H e\xE6 a\xB3a\xB6 [^r]ze\xE6 verb:praet:sg:sec:f:?perf BHdi H e\xE6 a\xB3a\xB6 [^rz]e\xE6 verb:praet:sg:sec:f:?perf +BHdi H e\xE6 a\xB3by [^r]ze\xE6 verb:aglt:praet:sg:ter:m:?perf BHdi H e\xE6 a\xB3by [^rz]e\xE6 verb:aglt:praet:sg:ter:m:?perf +BHdi H e\xE6 a\xB3bym [^r]ze\xE6 verb:aglt:praet:sg:pri:m:?perf BHdi H e\xE6 a\xB3bym [^rz]e\xE6 verb:aglt:praet:sg:pri:m:?perf +BHdi H e\xE6 a\xB3by\xB6 [^r]ze\xE6 verb:aglt:praet:sg:sec:m:?perf BHdi H e\xE6 a\xB3by\xB6 [^rz]e\xE6 verb:aglt:praet:sg:sec:m:?perf +BHdi H e\xE6 a\xB3em [^r]ze\xE6 verb:praet:sg:pri:m:?perf BHdi H e\xE6 a\xB3em [^rz]e\xE6 verb:praet:sg:pri:m:?perf +BHdi H e\xE6 a\xB3e\xB6 [^r]ze\xE6 verb:praet:sg:sec:m:?perf BHdi H e\xE6 a\xB3e\xB6 [^rz]e\xE6 verb:praet:sg:sec:m:?perf +BHdi H e\xE6 a\xB3o [^r]ze\xE6 verb:praet:sg:ter:n:?perf BHdi H e\xE6 a\xB3o [^rz]e\xE6 verb:praet:sg:ter:n:?perf +BHdi H e\xE6 a\xB3oby [^r]ze\xE6 verb:aglt:praet:sg:ter:n:?perf BHdi H e\xE6 a\xB3oby [^rz]e\xE6 verb:aglt:praet:sg:ter:n:?perf +BHdi H e\xE6 a\xB3obym [^r]ze\xE6 verb:aglt:praet:sg:pri:n:?perf +BHdi H e\xE6 a\xB3oby\xB6 [^r]ze\xE6 verb:aglt:praet:sg:sec:n:?perf +BHdi H e\xE6 a\xB3om [^r]ze\xE6 verb:praet:sg:pri:n:?perf +BHdi H e\xE6 a\xB3o\xB6 [^r]ze\xE6 verb:praet:sg:sec:n:?perf +BHdi H e\xE6 a\xB3y [^r]ze\xE6 verb:praet:pl:ter:f.n:?perf BHdi H e\xE6 a\xB3y [^rz]e\xE6 verb:praet:pl:ter:f.n:?perf +BHdi H e\xE6 a\xB3yby [^r]ze\xE6 verb:aglt:praet:pl:ter:f.n:?perf BHdi H e\xE6 a\xB3yby [^rz]e\xE6 verb:aglt:praet:pl:ter:f.n:?perf +BHdi H e\xE6 a\xB3yby\xB6cie [^r]ze\xE6 verb:aglt:praet:pl:sec:f.n:?perf BHdi H e\xE6 a\xB3yby\xB6cie [^rz]e\xE6 verb:aglt:praet:pl:sec:f.n:?perf +BHdi H e\xE6 a\xB3yby\xB6my [^r]ze\xE6 verb:aglt:praet:pl:pri:f.n:?perf BHdi H e\xE6 a\xB3yby\xB6my [^rz]e\xE6 verb:aglt:praet:pl:pri:f.n:?perf +BHdi H e\xE6 a\xB3y\xB6cie [^r]ze\xE6 verb:praet:pl:sec:f.n:?perf BHdi H e\xE6 a\xB3y\xB6cie [^rz]e\xE6 verb:praet:pl:sec:f.n:?perf +BHdi H e\xE6 a\xB3y\xB6my [^r]ze\xE6 verb:praet:pl:pri:f.n:?perf BHdi H e\xE6 a\xB3y\xB6my [^rz]e\xE6 verb:praet:pl:pri:f.n:?perf BHdi H \xE6 li [^rz]e\xE6 verb:praet:pl:ter:m1:?perf BHdi H \xE6 liby [^rz]e\xE6 verb:aglt:praet:pl:ter:m1:?perf @@ -15184,13 +15299,13 @@ DO O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:pl:gen:m1 DO O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m1 DO O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m -DO O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DO O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOPSTZsz D 0 i [jl] subst:pl:gen:m1 DOPSTZsz DOPSTZsz 0 0 subst:sg:nom:m1 DOPSTZsz O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m DOPSTZsz O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m DOPSTZsz O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m -DOPSTZsz O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DOPSTZsz O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOPSTZsz P el la [^i]el subst:sg:gen:m DOPSTZsz P el lem [^i]el subst:sg:inst:m DOPSTZsz P el lowi [^i]el subst:sg:dat:m @@ -15220,7 +15335,7 @@ DOPSZsz O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m DOPSZsz O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m DOPSZsz O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m -DOPSZsz O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DOPSZsz O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOPSZsz O \xF1 nia \xF1 subst:sg:gen:m DOPSZsz O \xF1 niem \xF1 subst:sg:inst:m DOPSZsz O \xF1 niowi \xF1 subst:sg:dat:m @@ -15274,12 +15389,13 @@ DOSTo O 0 a [^\xE6\xF1o\xB6w\xBCx] subst:sg:gen:m DOSTo O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m DOSTo O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m -DOSTo O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DOSTo O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOSTo S 0 ach [^a\xE6\xF1o\xB6w\xBCx] subst:pl:loc:m DOSTo S 0 ami [^a\xE6\xF1o\xB6w\xBCx] subst:pl:inst:m DOSTo S 0 om [^a\xE6\xF1o\xB6w\xBCx] subst:pl:dat:m DOSTo T 0 \xF3w [^a\xE6o\xF1\xB6w\xBCx] subst:pl:gen:m DOSTo o 0 owie [^a\xE6io\xF1\xB6y\xBCx] subst:pl:nom:m1 +OTZosz o 0 owie [^a\xE6io\xF1\xB6y\xBCx] subst:pl:nom:m1 DOSTos D 0 i [jl] subst:pl:gen:m1 DOSTos D 0 y z subst:pl:gen:m1 DOSTos D \xE6 ci \xE6 subst:pl:gen:m1 @@ -15289,7 +15405,7 @@ DOSTos O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m DOSTos O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m DOSTos O 0 u [^aou]z subst:sg:loc.voc:m -DOSTos O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DOSTos O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOSTos O \xE6 cia \xE6 subst:sg:acc.gen:m DOSTos O \xE6 ciem \xE6 subst:sg:inst:m DOSTos O \xE6 ciowi \xE6 subst:sg:dat:m @@ -15323,7 +15439,7 @@ DOSTq O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m DOSTq O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m DOSTq O 0 u [^aou]z subst:sg:loc.voc:m -DOSTq O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DOSTq O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOSTq S 0 ach [^a\xE6\xF1o\xB6w\xBCx] subst:pl:loc:m DOSTq S 0 ami [^a\xE6\xF1o\xB6w\xBCx] subst:pl:inst:m DOSTq S 0 om [^a\xE6\xF1o\xB6w\xBCx] subst:pl:dat:m @@ -15341,7 +15457,7 @@ DOSTs O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m3 DOSTs O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m3 DOSTs O 0 u [^aou]z subst:sg:loc.voc:m -DOSTs O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DOSTs O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOSTs O \xE6 cia \xE6 subst:sg:acc.gen:m DOSTs O \xE6 ciem \xE6 subst:sg:inst:m DOSTs O \xE6 ciowi \xE6 subst:sg:dat:m @@ -15381,7 +15497,7 @@ DOSTs s 0 e [cds]z subst:pl:nom:m DOSTs s 0 e [cjly\xBF] subst:pl:nom:m DOSTs s 0 i [kg] subst:pl:gen:m1 -DOSTs s 0 y [^ac\xE6gjkl\xF1o\xB6z\xBC\xBFx] subst:pl:gen:m1 +DOSTs s 0 y [^ac\xE6gjkl\xF1o\xB6yz\xBC\xBFx] subst:pl:gen:m1 DOSTs s 0 y [^cds]z subst:pl:gen:m1 DOSTs s \xE6 cie \xE6 subst:pl:nom:m DOSTs s \xF1 nie \xF1 subst:pl:nom:m @@ -15393,7 +15509,7 @@ DOSq O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m3 DOSq O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m3 DOSq O 0 u [^aou]z subst:sg:loc.voc:m -DOSq O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DOSq O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOSq S 0 ach [^a\xE6\xF1o\xB6w\xBCx] subst:pl:loc:m DOSq S 0 ami [^a\xE6\xF1o\xB6w\xBCx] subst:pl:inst:m DOSq S 0 om [^a\xE6\xF1o\xB6w\xBCx] subst:pl:dat:m @@ -15410,7 +15526,7 @@ DOSs O 0 em [^\xE6gk\xF1o\xB6w\xBCx] subst:sg:inst:m3 DOSs O 0 owi [^\xE6\xF1o\xB6tw\xBCx] subst:sg:dat:m3 DOSs O 0 u [^aou]z subst:sg:loc.voc:m -DOSs O 0 u [cghjkl\xBF] subst:sg:loc.voc:m +DOSs O 0 u [cghjkly\xBF] subst:sg:loc.voc:m DOSs O \xE6 cia \xE6 subst:sg:acc.gen:m DOSs O \xE6 ciem \xE6 subst:sg:inst:m DOSs O \xE6 ciowi \xE6 subst:sg:dat:m @@ -15444,7 +15560,7 @@ DOSs S \xBC ziom \xBC subst:pl:dat:m DOSs s 0 e [cds]z subst:pl:nom:m DOSs s 0 e [cjly\xBF] subst:pl:nom:m -DOSs s 0 y [^ac\xE6gjkl\xF1o\xB6z\xBC\xBFx] subst:pl:gen:m1 +DOSs s 0 y [^ac\xE6gjkl\xF1o\xB6yz\xBC\xBFx] subst:pl:gen:m1 DOSs s 0 y [^cds]z subst:pl:gen:m1 DOSs s \xE6 cie \xE6 subst:pl:nom:m DOSs s \xF1 nie \xF1 subst:pl:nom:m @@ -15469,6 +15585,7 @@ DQSTs D \xF1 ni \xF1 subst:pl:gen:m1 DQSTs DQSTs 0 0 subst:sg:nom.acc:m3 DQSTs Q 0 em [^gk\xF1x] subst:sg:inst:m3 +QSTos Q 0 em [^gk\xF1x] subst:sg:inst:m3 DQSTs Q 0 owi [^\xF1x] subst:sg:dat:m3 DQSTs Q 0 u [^\xF1x] subst:sg:gen.loc.voc:m DQSTs Q \xF1 niem \xF1 subst:sg:inst:m3 @@ -15484,7 +15601,7 @@ DQSTs T \xF1 ni\xF3w \xF1 subst:pl:gen:m DQSTs s 0 e [cds]z subst:pl:nom:m DQSTs s 0 e [cjly\xBF] subst:pl:nom:m -DQSTs s 0 y [^ac\xE6gjkl\xF1o\xB6z\xBC\xBFx] subst:pl:gen:m3 +DQSTs s 0 y [^ac\xE6gjkl\xF1o\xB6yz\xBC\xBFx] subst:pl:gen:m3 DQSTs s \xF1 nie \xF1 subst:pl:nom:m DQSs D 0 i [jl] subst:pl:gen:m1 DQSs D 0 y z subst:pl:gen:m1 @@ -15498,14 +15615,14 @@ DQSs S 0 om [^a\xE6\xF1o\xB6w\xBCx] subst:pl:dat:m DQSs s 0 e [cds]z subst:pl:nom:m DQSs s 0 e [cjly\xBF] subst:pl:nom:m -DQSs s 0 y [^ac\xE6gjkl\xF1o\xB6z\xBC\xBFx] subst:pl:gen:m1 +DQSs s 0 y [^ac\xE6gjkl\xF1o\xB6yz\xBC\xBFx] subst:pl:gen:m1 DSs D 0 y \xBF subst:pl:gen:m1 DSs DSs 0 0 subst:sg:nom.acc:m3 DSs S 0 ach [^a\xE6\xF1o\xB6w\xBCx] subst:pl:loc:m DSs S 0 ami [^a\xE6\xF1o\xB6w\xBCx] subst:pl:inst:m DSs S 0 om [^a\xE6\xF1o\xB6w\xBCx] subst:pl:dat:m DSs s 0 e [cjly\xBF] subst:pl:nom:m -DSs s 0 y [^ac\xE6gjkl\xF1o\xB6z\xBC\xBFx] subst:pl:gen:m1 +DSs s 0 y [^ac\xE6gjkl\xF1o\xB6yz\xBC\xBFx] subst:pl:gen:m1 E E 0 0 verb:imps E E \xE6 na [^\xBF]a\xE6 ppas:sg:nom.voc:f E E \xE6 ne [^\xBF]a\xE6 ppas:sg:nom.acc.voc:n+ppas:pl:nom.acc.voc:n @@ -15756,6 +15873,12 @@ EGHJdi J a\xE6 oisz sta\xE6 verb:sg:sec:?perf EGHJdi J a\xE6 oj\xB1 sta\xE6 verb:ter:pl:?perf EGHJdi J a\xE6 oj\xEA sta\xE6 verb:sg:pri:?perf +EHJdi J a\xE6 oi sta\xE6 verb:sg:ter:?perf +EHJdi J a\xE6 oicie sta\xE6 verb:pl:sec:?perf +EHJdi J a\xE6 oimy sta\xE6 verb:pl:pri:?perf +EHJdi J a\xE6 oisz sta\xE6 verb:sg:sec:?perf +EHJdi J a\xE6 oj\xB1 sta\xE6 verb:ter:pl:?perf +EHJdi J a\xE6 oj\xEA sta\xE6 verb:sg:pri:?perf EGHJdi d \xE6 no [^i]a\xE6 verb:imps EGHJdi i \xE6 nia [^i]a\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n EGHJdi i \xE6 niach [^i]a\xE6 subst:ger:pl:loc:n @@ -19676,12 +19799,24 @@ FGJ F emrze\xE6 marliby\xB6my emrze\xE6 verb:aglt:praet:pl:pri:m1:?perf FGJ F emrze\xE6 marli\xB6cie emrze\xE6 verb:praet:pl:sec:m1:?perf FGJ F emrze\xE6 marli\xB6my emrze\xE6 verb:praet:pl:pri:m1:?perf +FJ F emrze\xE6 marli emrze\xE6 verb:praet:pl:ter:m1:?perf +FJ F emrze\xE6 marliby emrze\xE6 verb:aglt:praet:pl:ter:m1:?perf +FJ F emrze\xE6 marliby\xB6cie emrze\xE6 verb:aglt:praet:pl:sec:m1: +FJ F emrze\xE6 marliby\xB6my emrze\xE6 verb:aglt:praet:pl:pri:m1: +FJ F emrze\xE6 marli\xB6cie emrze\xE6 verb:praet:pl:sec:m1:?perf +FJ F emrze\xE6 marli\xB6my emrze\xE6 verb:praet:pl:pri:m1:?perf FGJ F emrze\xE6 mar\xB3 emrze\xE6 verb:praet:sg:ter:m:?perf FGJ F emrze\xE6 mar\xB3a emrze\xE6 verb:praet:sg:ter:f:?perf FGJ F emrze\xE6 mar\xB3aby emrze\xE6 verb:aglt:praet:sg:ter:f:?perf FGJ F emrze\xE6 mar\xB3abym emrze\xE6 verb:aglt:praet:sg:pri:f:?perf FGJ F emrze\xE6 mar\xB3aby\xB6 emrze\xE6 verb:aglt:praet:sg:sec:f:?perf FGJ F emrze\xE6 mar\xB3am emrze\xE6 verb:praet:sg:pri:f:?perf +FJ F emrze\xE6 mar\xB3 emrze\xE6 verb:praet:sg:ter:m:?perf +FJ F emrze\xE6 mar\xB3a emrze\xE6 verb:praet:sg:ter:f:?perf +FJ F emrze\xE6 mar\xB3aby emrze\xE6 verb:aglt:praet:sg:ter:f:?perf +FJ F emrze\xE6 mar\xB3abym emrze\xE6 verb:aglt:praet:sg:pri:f:?perf +FJ F emrze\xE6 mar\xB3aby\xB6 emrze\xE6 verb:aglt:praet:sg:sec:f:?perf +FJ F emrze\xE6 mar\xB3am emrze\xE6 verb:praet:sg:pri:f:?perf FGJ F emrze\xE6 mar\xB3a\xB6 emrze\xE6 verb:praet:sg:sec:f:?perf FGJ F emrze\xE6 mar\xB3by emrze\xE6 verb:aglt:praet:sg:ter:m:?perf FGJ F emrze\xE6 mar\xB3bym emrze\xE6 verb:aglt:praet:sg:pri:m:?perf @@ -19690,6 +19825,14 @@ FGJ F emrze\xE6 mar\xB3e\xB6 emrze\xE6 verb:praet:sg:sec:m:?perf FGJ F emrze\xE6 mar\xB3o emrze\xE6 verb:praet:sg:ter:n:?perf FGJ F emrze\xE6 mar\xB3oby emrze\xE6 verb:aglt:praet:sg:ter:n:?perf +FJ F emrze\xE6 mar\xB3a\xB6 emrze\xE6 verb:praet:sg:sec:f:?perf +FJ F emrze\xE6 mar\xB3by emrze\xE6 verb:aglt:praet:sg:ter:m:?perf +FJ F emrze\xE6 mar\xB3bym emrze\xE6 verb:aglt:praet:sg:pri:m:?perf +FJ F emrze\xE6 mar\xB3by\xB6 emrze\xE6 verb:aglt:praet:sg:sec:m:?perf +FJ F emrze\xE6 mar\xB3em emrze\xE6 verb:praet:sg:pri:m:?perf +FJ F emrze\xE6 mar\xB3e\xB6 emrze\xE6 verb:praet:sg:sec:m:?perf +FJ F emrze\xE6 mar\xB3o emrze\xE6 verb:praet:sg:ter:n:?perf +FJ F emrze\xE6 mar\xB3oby emrze\xE6 verb:aglt:praet:sg:ter:n:?perf FGJ F emrze\xE6 mar\xB3obym emrze\xE6 verb:aglt:praet:sg:pri:n:?perf FGJ F emrze\xE6 mar\xB3oby\xB6 emrze\xE6 verb:aglt:praet:sg:sec:n:?perf FGJ F emrze\xE6 mar\xB3om emrze\xE6 verb:praet:sg:pri:n:?perf @@ -19700,6 +19843,12 @@ FGJ F emrze\xE6 mar\xB3yby\xB6my emrze\xE6 verb:aglt:praet:pl:pri:n:?perf FGJ F emrze\xE6 mar\xB3y\xB6cie emrze\xE6 verb:praet:pl:sec:n:?perf FGJ F emrze\xE6 mar\xB3y\xB6my emrze\xE6 verb:praet:pl:pri:n:?perf +FJ F emrze\xE6 mar\xB3y emrze\xE6 verb:praet:pl:ter:n:?perf +FJ F emrze\xE6 mar\xB3yby emrze\xE6 verb:aglt:praet:pl:ter:n:?perf +FJ F emrze\xE6 mar\xB3yby\xB6cie emrze\xE6 verb:aglt:praet:pl:sec:n: +FJ F emrze\xE6 mar\xB3yby\xB6my emrze\xE6 verb:aglt:praet:pl:pri:n: +FJ F emrze\xE6 mar\xB3y\xB6cie emrze\xE6 verb:praet:pl:sec:n:?perf +FJ F emrze\xE6 mar\xB3y\xB6my emrze\xE6 verb:praet:pl:pri:n:?perf FGJ FGJ 0 0 verb:inf:perf FGJ G emrze\xE6 marli emrze\xE6 adj:pl:nom.voc:m1 FGJ G emrze\xE6 mar\xB3a emrze\xE6 adj:sg:nom.voc:f @@ -20505,29 +20654,54 @@ GHIej G e\xE6 a\xB3\xB1 [^m][csr]ze\xE6 adj:sg:acc.inst:f GHIej GHIej 0 0 verb:inf:perf GHIej H e\xE6 a\xB3 [abjot]rze\xE6 verb:praet:sg:ter:m:?perf +HIej H e\xE6 a\xB3 [abjot]rze\xE6 verb:praet:sg:ter:m:?perf +HIej H e\xE6 a\xB3 [abjot]rze\xE6 verb:praet:sg:ter:m:?perf GHIej H e\xE6 a\xB3a [abjot]rze\xE6 verb:praet:sg:ter:f:?perf +HIej H e\xE6 a\xB3a [abjot]rze\xE6 verb:praet:sg:ter:f:?perf GHIej H e\xE6 a\xB3aby [abjot]rze\xE6 verb:aglt:praet:sg:ter:f:?perf +HIej H e\xE6 a\xB3aby [abjot]rze\xE6 verb:aglt:praet:sg:ter:f:?perf GHIej H e\xE6 a\xB3abym [abjot]rze\xE6 verb:aglt:praet:sg:pri:f:?perf +HIej H e\xE6 a\xB3abym [abjot]rze\xE6 verb:aglt:praet:sg:pri:f:?perf GHIej H e\xE6 a\xB3aby\xB6 [abjot]rze\xE6 verb:aglt:praet:sg:sec:f:?perf +HIej H e\xE6 a\xB3aby\xB6 [abjot]rze\xE6 verb:aglt:praet:sg:sec:f:?perf GHIej H e\xE6 a\xB3am [abjot]rze\xE6 verb:praet:sg:pri:f:?perf +HIej H e\xE6 a\xB3am [abjot]rze\xE6 verb:praet:sg:pri:f:?perf GHIej H e\xE6 a\xB3a\xB6 [abjot]rze\xE6 verb:praet:sg:sec:f:?perf +HIej H e\xE6 a\xB3a\xB6 [abjot]rze\xE6 verb:praet:sg:sec:f:?perf GHIej H e\xE6 a\xB3by [abjot]rze\xE6 verb:aglt:praet:sg:ter:m:?perf +HIej H e\xE6 a\xB3by [abjot]rze\xE6 verb:aglt:praet:sg:ter:m:?perf GHIej H e\xE6 a\xB3bym [abjot]rze\xE6 verb:aglt:praet:sg:pri:m:?perf +HIej H e\xE6 a\xB3bym [abjot]rze\xE6 verb:aglt:praet:sg:pri:m:?perf GHIej H e\xE6 a\xB3by\xB6 [abjot]rze\xE6 verb:aglt:praet:sg:sec:m:?perf +HIej H e\xE6 a\xB3by\xB6 [abjot]rze\xE6 verb:aglt:praet:sg:sec:m:?perf GHIej H e\xE6 a\xB3em [abjot]rze\xE6 verb:praet:sg:pri:m:?perf +HIej H e\xE6 a\xB3em [abjot]rze\xE6 verb:praet:sg:pri:m:?perf GHIej H e\xE6 a\xB3e\xB6 [abjot]rze\xE6 verb:praet:sg:sec:m:?perf +HIej H e\xE6 a\xB3e\xB6 [abjot]rze\xE6 verb:praet:sg:sec:m:?perf GHIej H e\xE6 a\xB3o [abjot]rze\xE6 verb:praet:sg:ter:n:?perf +HIej H e\xE6 a\xB3o [abjot]rze\xE6 verb:praet:sg:ter:n:?perf GHIej H e\xE6 a\xB3oby [abjot]rze\xE6 verb:aglt:praet:sg:ter:n:?perf +HIej H e\xE6 a\xB3oby [abjot]rze\xE6 verb:aglt:praet:sg:ter:n:?perf GHIej H e\xE6 a\xB3obym [abjot]rze\xE6 verb:aglt:praet:sg:pri:n:?perf +HIej H e\xE6 a\xB3obym [abjot]rze\xE6 verb:aglt:praet:sg:pri:n:?perf GHIej H e\xE6 a\xB3oby\xB6 [abjot]rze\xE6 verb:aglt:praet:sg:sec:n:?perf +HIej H e\xE6 a\xB3oby\xB6 [abjot]rze\xE6 verb:aglt:praet:sg:sec:n:?perf GHIej H e\xE6 a\xB3om [abjot]rze\xE6 verb:praet:sg:pri:n:?perf +HIej H e\xE6 a\xB3om [abjot]rze\xE6 verb:praet:sg:pri:n:?perf GHIej H e\xE6 a\xB3o\xB6 [abjot]rze\xE6 verb:praet:sg:sec:n:?perf +HIej H e\xE6 a\xB3o\xB6 [abjot]rze\xE6 verb:praet:sg:sec:n:?perf GHIej H e\xE6 a\xB3y [abjot]rze\xE6 verb:praet:pl:ter:n:?perf +HIej H e\xE6 a\xB3y [abjot]rze\xE6 verb:praet:pl:ter:n:?perf GHIej H e\xE6 a\xB3yby [abjot]rze\xE6 verb:aglt:praet:pl:ter:n:?perf +HIej H e\xE6 a\xB3yby [abjot]rze\xE6 verb:aglt:praet:pl:ter:n:?perf GHIej H e\xE6 a\xB3yby\xB6cie [abjot]rze\xE6 verb:aglt:praet:pl:sec:n:?perf +HIej H e\xE6 a\xB3yby\xB6cie [abjot]rze\xE6 verb:aglt:praet:pl:sec:n:?perf GHIej H e\xE6 a\xB3yby\xB6my [abjot]rze\xE6 verb:aglt:praet:pl:pri:n:?perf +HIej H e\xE6 a\xB3yby\xB6my [abjot]rze\xE6 verb:aglt:praet:pl:pri:n:?perf GHIej H e\xE6 a\xB3y\xB6cie [abjot]rze\xE6 verb:praet:pl:sec:n:?perf +HIej H e\xE6 a\xB3y\xB6cie [abjot]rze\xE6 verb:praet:pl:sec:n:?perf GHIej H e\xE6 a\xB3y\xB6my [abjot]rze\xE6 verb:praet:pl:pri:n:?perf +HIej H e\xE6 a\xB3y\xB6my [abjot]rze\xE6 verb:praet:pl:pri:n:?perf GHIej H \xE6 li [abjot]rze\xE6 verb:praet:pl:ter:m1:?perf GHIej H \xE6 liby [abjot]rze\xE6 verb:aglt:praet:pl:ter:m1:?perf GHIej H \xE6 liby\xB6cie [abjot]rze\xE6 verb:aglt:praet:pl:sec:m1:?perf @@ -20540,7 +20714,14 @@ GHIej I e\xE6 ysz ze\xE6 verb:sg:sec:?perf GHIej I e\xE6 \xB1 ze\xE6 verb:ter:pl:?perf GHIej I e\xE6 \xEA ze\xE6 verb:sg:pri:?perf +HIej I e\xE6 y ze\xE6 verb:sg:ter:?perf +HIej I e\xE6 ycie ze\xE6 verb:pl:sec:?perf +HIej I e\xE6 ymy ze\xE6 verb:pl:pri:?perf +HIej I e\xE6 ysz ze\xE6 verb:sg:sec:?perf +HIej I e\xE6 \xB1 ze\xE6 verb:ter:pl:?perf +HIej I e\xE6 \xEA ze\xE6 verb:sg:pri:?perf GHIej e e\xE6 ano rze\xE6 verb:imps +HIej e e\xE6 ano rze\xE6 verb:imps GHIej j e\xE6 enia rze\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n GHIej j e\xE6 eniach rze\xE6 subst:ger:pl:loc:n GHIej j e\xE6 eniami rze\xE6 subst:ger:pl:inst:n @@ -20549,6 +20730,14 @@ GHIej j e\xE6 eniom rze\xE6 subst:ger:pl:dat:n GHIej j e\xE6 eniu rze\xE6 subst:ger:sg:dat.loc:n GHIej j e\xE6 e\xF1 rze\xE6 subst:ger:pl:gen:n +HIej j e\xE6 enia rze\xE6 subst:ger:pl:nom.acc.voc:n+subst:ger:sg:gen:n +HIej j e\xE6 eniach rze\xE6 subst:ger:pl:loc:n +HIej j e\xE6 eniami rze\xE6 subst:ger:pl:inst:n +HIej j e\xE6 enie rze\xE6 subst:ger:sg:nom.acc.voc:n +HIej j e\xE6 eniem rze\xE6 subst:ger:sg:inst:n +HIej j e\xE6 eniom rze\xE6 subst:ger:pl:dat:n +HIej j e\xE6 eniu rze\xE6 subst:ger:sg:dat.loc:n +HIej j e\xE6 e\xF1 rze\xE6 subst:ger:pl:gen:n GHIejk G e\xE6 ali [il]e\xE6 adj:pl:nom.voc:m1 GHIejk G e\xE6 a\xB3a [il]e\xE6 adj:sg:nom.voc:f GHIejk G e\xE6 a\xB3e [il]e\xE6 adj:sg:nom.acc.voc:n+adj:pl:nom.acc.voc:n @@ -24206,20 +24395,27 @@ Jej j e\xE6 eniu rze\xE6 subst:ger:sg:dat.loc:n Jej j e\xE6 e\xF1 rze\xE6 subst:ger:pl:gen:n K K 0 0 subst:sg:nom:f +KM KM 0 0 subst:sg:nom:f K K a ch ia subst:pl:gen.loc:f K K a e [^k]a subst:pl:nom.acc.voc:f +KM K a e [^k]a subst:pl:nom.acc.voc:f K K a ej [^k]a subst:sg:gen.dat.loc:f +KM K a ej [^k]a subst:sg:gen.dat.loc:f K K a ich ka subst:pl:gen.loc:f +KM K a ych [^ki]a subst:pl:gen.loc:f K K a ie ka subst:pl:nom.acc.voc:f K K a iej ka subst:sg:gen.dat.loc:f K K a im ka subst:pl:dat:f +KM K a ym [^ki]a subst:pl:dat:f K K a imi ka subst:pl:inst:f +KM K a ymi [^ik]a subst:pl:inst:f K K a m ia subst:pl:dat:f K K a mi ia subst:pl:inst:f K K a ych [^ki]a subst:pl:gen.loc:f K K a ym [^ki]a subst:pl:dat:f K K a ymi [^ik]a subst:pl:inst:f K K a \xB1 a subst:sg:inst:f +KM K a \xB1 a subst:sg:inst:f KL K a e [^k]a subst:pl:nom.acc.voc:f KL K a ej [^k]a subst:sg:gen.dat.loc:f KL K a ych [^ki]a subst:pl:gen.loc:f @@ -24236,20 +24432,27 @@ KMNn K a \xB1 a subst:sg:inst:f KMNn KMNn 0 0 subst:sg:nom:f KMNn M a ie [^sz]na subst:pl:nom.acc.voc:f +KM M a ie [^sz]na subst:pl:nom.acc.voc:f KMNn M a o [^l]a subst:sg:voc:f KMNn M a y na subst:sg:gen:f KMNn M a \xB1 a subst:sg:inst:f KMNn M a \xEA [^w]a subst:sg:acc:f +KM M a o [^l]a subst:sg:voc:f +KM M a y na subst:sg:gen:f +KM M a \xB1 a subst:sg:inst:f +KM M a \xEA [^w]a subst:sg:acc:f KMNn N 0 ch [^w]a subst:pl:loc:f KMNn N 0 mi [^w]a subst:pl:inst:f KMNn N a om [^w]a subst:pl:dat:f KMNn n a [^z]a subst:pl:gen:f +KMNn n a a subst:pl:gen:f L L 0 0 subst:sg:nom:f L L a o [^aeuy]nia subst:sg:voc:f L L a o [^hi]ania subst:sg:voc:f L L a o [^i]a subst:sg:voc:f L L a o [^r]ynia subst:sg:voc:f L L a u [bimrt]unia subst:sg:voc:f +L L a o [^bimrt]unia subst:sg:voc:f L L a \xB1 [ij]a subst:sg:inst:f L L a \xEA [ij]a subst:sg:acc:f L L ia i ia subst:sg:gen.dat.loc:f+subst:pl:gen:f @@ -24275,11 +24478,22 @@ LNTfo o a owie a subst:pl:nom.voc:m1 LNTo L a o [^i]a subst:sg:voc:m1 LNTo LNTo 0 0 subst:sg:nom:m1 +NTo NTo 0 0 subst:sg:nom:m1 LNTo N 0 ch [^w]a subst:pl:loc:m1 LNTo N 0 mi [^w]a subst:pl:inst:m1 LNTo N a om [^w]a subst:pl:dat:m1 +NTo N 0 ch [^w]a subst:pl:loc:m1 +NTo N 0 mi [^w]a subst:pl:inst:m1 +NTo N a om [^w]a subst:pl:dat:m1 LNTo T a \xF3w a subst:pl:acc.gen:m1 LNTo o a owie a subst:pl:nom:m1 +NTo T a \xF3w a subst:pl:acc.gen:m1 +NTo o a owie a subst:pl:nom:m1 +LNTo L a o [^hi]ania subst:sg:voc:m1 +LNTo L a \xB1 [ij]a subst:sg:instr:m1 +LNTo L a \xEA [ij]a subst:sg:acc:m1 +LNTo L ia i ia subst:sg:gen:m1 +LNTo L ja i ja subst:sg:gen:m1 LNf L a o [^i]a subst:sg:voc:f LNf LNf 0 0 subst:sg:nom:f LNf N 0 ch [^w]a subst:pl:loc:f @@ -24295,6 +24509,7 @@ LNflo l a \xF3w a subst:pl:acc.gen:m1 LNflo o a owie a subst:pl:nom.voc:m1 LNfn L a o [^i]a subst:sg:voc:m1 +LNfn n a a subst:pl:gen:m1 LNfn LNfn 0 0 subst:sg:nom:m1 LNfn N 0 ch [^w]a subst:pl:loc:m1 LNfn N 0 mi [^w]a subst:pl:inst:m1 @@ -24309,6 +24524,8 @@ LNm m na en [^mnow]na subst:pl:gen:f LNn L a o [^i]a subst:sg:voc:f LNn LNn 0 0 subst:sg:nom:f +LNn n a a subst:pl:gen:f +Nn n a a subst:pl:gen:f LNn N 0 ch [^w]a subst:pl:loc:f LNn N 0 mi [^w]a subst:pl:inst:f LNn N a om [^w]a subst:pl:dat:f @@ -24325,19 +24542,21 @@ M M 0 \xB1 [^s]z subst:sg:inst:f M M 0 \xB1 \xBF subst:sg:inst:f M M a ej [cfilt]owa subst:sg:dat.loc:f -M M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f -M M a ie [^cdghijkl\xB3nrtzw\xBF]a subst:sg:dat:m1 +M M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f +M M a ie [^cdghijkl\xB3nrtvwz\xBF]a subst:sg:dat:m1 M M a ie [^cdrs]za subst:sg:dat.loc:f M M a ie [^cfilt]owa subst:sg:dat.loc:f +M M a ie [^o]va subst:sg:dat.loc:f M M a ie [^o]wa subst:sg:dat.loc:f M M a ie [^sz]na subst:sg:dat.loc:f +M M a ie rzna subst:sg:dat.loc:f M M a ie szna subst:sg:dat.loc:f M M a o [^bt]ula subst:sg:voc:f M M a o [^l]a subst:sg:voc:f M M a o [^u]la subst:sg:voc:f M M a y [^cfilt]owa subst:sg:gen:f M M a y [^o]wa subst:sg:gen:f -M M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +M M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f M M a y na subst:sg:gen:f M M a ze [^a]ra subst:sg:dat.loc:f M M a ze [^fmw]iara subst:sg:dat.loc:f @@ -24363,7 +24582,7 @@ M M sna \xB6nie sna subst:sg:dat.loc:f M M s\xB3a \xB6le s\xB3a subst:sg:dat.loc:f M M ta cie [^s]ta subst:sg:dat.loc:f -M M zna \xBCnie [^cs]zna subst:sg:dat.loc:f +M M zna \xBCnie [^crs]zna subst:sg:dat.loc:f M M \xE6 ci [^e]\xB6\xE6 subst:sg:gen:f M M \xE6 ci [^e\xB6]\xE6 subst:sg:gen:f M M \xE6 ci [^h\xB3]e\xE6 subst:sg:gen.dat.loc:f @@ -24380,23 +24599,28 @@ M M \xBC zi\xB1 [^d]\xBC subst:sg:inst:f M M \xBC zi\xB1 [^\xF3]d\xBC subst:sg:inst:f MN M 0 i [^\xF3]l subst:sg:gen:f +M M 0 i [^\xF3]l subst:sg:gen:f MN M 0 y [^e]sz subst:sg:gen:f +M M 0 y c subst:sg:gen:f MN M 0 y [^s]z subst:sg:gen:f MN M 0 \xB1 [^e]sz subst:sg:inst:f MN M 0 \xB1 [^s]z subst:sg:inst:f MN M 0 \xB1 [^\xF3]l subst:sg:inst:f +M M 0 \xB1 [^\xF3]l subst:sg:inst:f +M M 0 \xB1 c subst:sg:inst:f MN M a ej [cfilt]owa subst:sg:gen.dat.loc:f -MN M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f -MN M a ie [^cdghijkl\xB3nrtzw\xBF]a subst:sg:dat.loc:f +MN M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f +MN M a ie [^cdghijkl\xB3nrtvwz\xBF]a subst:sg:dat.loc:f MN M a ie [^cdrs]za subst:sg:dat.loc:f MN M a ie [^cfilt]owa subst:sg:dat.loc:f +MN M a ie [^o]va subst:sg:dat.loc:f MN M a ie [^o]wa subst:sg:dat.loc:f MN M a ie [^sz]na subst:sg:dat.loc:f MN M a o [^l]a subst:sg:voc:f MN M a o [^u]la subst:sg:voc:f MN M a y [^cfilt]owa subst:sg:gen:f MN M a y [^o]wa subst:sg:gen:f -MN M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +MN M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f MN M a y na subst:sg:gen:f MN M a ze [^a]ra subst:sg:dat.loc:f MN M a ze [^i]ara subst:sg:dat.loc:f @@ -24412,7 +24636,7 @@ MN M ga dze ga subst:sg:dat.loc:f MN M ka ce ka subst:sg:dat.loc:f MN M ta cie [^s]ta subst:sg:dat.loc:f -MN M zna \xBCnie [^cs]zna subst:sg:dat.loc:f +MN M zna \xBCnie [^crs]zna subst:sg:dat.loc:f MN M \xE6 ci [^e]\xB6\xE6 subst:sg:gen:f MN M \xE6 ci [^e\xB6]\xE6 subst:sg:gen:f MN M \xE6 ci [^h\xB3]e\xE6 subst:sg:gen:f @@ -24485,15 +24709,15 @@ MN N \xBC ziami [^\xF3]d\xBC subst:pl:inst:f MN N \xBC ziom [^d]\xBC subst:pl:dat:f MN N \xBC ziom [^\xF3]d\xBC subst:pl:dat:f -MNT M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:m1 -MNT M a ie [^cdghijkl\xB3nrtzw\xBF]a subst:sg:dat.loc:m1 +MNT M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:m1 +MNT M a ie [^cdghijkl\xB3nrtvwz\xBF]a subst:sg:dat.loc:m1 MNT M a ie [^cfilt]owa subst:sg:dat.loc:m1 MNT M a ie [^o]wa subst:sg:dat.loc:m1 MNT M a ie [^sz]na subst:sg:dat.loc:m1 MNT M a o [^l]a subst:sg:voc:m1 MNT M a y [^cfilt]owa subst:sg:gen:m1 MNT M a y [^o]wa subst:sg:gen:m1 -MNT M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:m1 +MNT M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:m1 MNT M a y na subst:sg:gen:m1 MNT M a ze [^a]ra subst:sg:dat.loc:m1 MNT M a ze [^i]ara subst:sg:dat.loc:m1 @@ -24507,6 +24731,7 @@ MNT M cha sze cha subst:sg:dat.loc:m1 MNT M ga dze ga subst:sg:dat.loc:m1 MNT M ka ce ka subst:sg:dat.loc:m1 +MNTm M ka ce ka subst:sg:dat.loc:m1 MNT M ta cie [^s]ta subst:sg:dat.loc:m1 MNT M \xB3a le [^\xB3s]\xB3a subst:sg:dat.loc:m1 MNT MNT 0 0 subst:sg:nom:m1 @@ -24520,7 +24745,7 @@ MNT N a om [^o]wa subst:pl:dat:m1 MNT N a om [^w]a subst:pl:dat:m1 MNT T a \xF3w a subst:pl:gen:m1 -MNTm M a i [^bcdfh\xB3mnprstwz\xBF]a subst:pl:nom.voc:m1 +MNTm M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:pl:nom.voc:m1 MNTm M a o [^l]a subst:sg:voc:m1 MNTm M a \xB1 a subst:sg:inst:m MNTm M a \xEA [^w]a subst:sg:acc:m1 @@ -24532,37 +24757,55 @@ MNTm N a om [^w]a subst:pl:dat:m1 MNTm T a \xF3w a subst:pl:gen:m1 MNTm m oga \xF3g oga subst:pl:gen:f -MNTn M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f -MNTn M a ie [^cdghijkl\xB3nrtzw\xBF]a subst:sg:dat.loc:f +MNTn M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f +MNTn n a a subst:sg:gen:f +MNTn M a ie [^cdghijkl\xB3nrtvwz\xBF]a subst:sg:dat.loc:f +MNTo M a ie [^cfilt]owa subst:sg:dat.loc:f MNTn M a ie [^sz]na subst:sg:dat.loc:f MNTn M a o [^l]a subst:sg:voc:f -MNTn M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f+subst:pl:dat:m +MNTo M a o [^a][bt]ula subst:sg:voc:f +MNTo M a o [^bt]ula subst:sg:voc:f +MNTn M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f+subst:pl:dat:m +MNTo M a y [^cfilt]owa subst:sg:gen:f+subst:pl:dat:m MNTn M a y na subst:sg:gen:f +MNTo M a y na subst:sg:gen:f MNTn M a ze [^a]ra subst:sg:dat.loc:f +MNTo M a ze [^fmw]iara subst:sg:dat.loc:f MNTn M a ze [^i]ara subst:sg:dat.loc:f MNTn M a zie [^z]da subst:sg:dat.loc:f MNTn M a \xB1 a subst:sg:inst:m MNTn M a \xEA [^w]a subst:sg:acc:f +MNTo M a \xEA [^cfilt]owa subst:sg:acc:f MNTn M cha sze cha subst:sg:dat.loc:f +MNTo M ara erze [fmw]iara subst:sg:dat.loc:f +MNTo M ha \xBFe [^ac]ha subst:sg:dat.loc:f MNTn M ga dze ga subst:sg:dat.loc:f MNTn M ka ce ka subst:sg:dat.loc:f MNTn M ta cie [^s]ta subst:sg:dat.loc:f +MNTo M sta \xB6cie [^a]sta subst:sg:dat.loc:f +MNTo M sta \xB6cie [^i]asta subst:sg:dat.loc:f +MNTo M sta \xB6cie [^w]iasta subst:sg:dat.loc:f +MNTo M zda \xBCdzie [^a]zda subst:sg:dat.loc:f MNTn M \xB3a le [^\xB3s]\xB3a subst:sg:dat.loc:f MNTn MNTn 0 0 subst:sg:nom:f MNTn N 0 ch [^w]a subst:pl:loc:m +MNTo N 0 ch [^cfilt]owa subst:pl:loc:m MNTn N 0 mi [^w]a subst:pl:inst:m +MNTo N 0 mi [^cfilt]owa subst:pl:inst:m +MNTo N a om [^cfilt]owa subst:pl:dat:m MNTn N a om [^w]a subst:pl:dat:m MNTn T a \xF3w a subst:pl:gen:m MNTn n a .a subst:pl:gen:m1 MNTn n a [^z]a subst:pl:gen:f -MNTo M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f -MNTo M a ie [^cdghijkl\xB3nrtzw\xBF]a subst:sg:dat.loc:f +MNTo M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f +MNTo M a ie [^cdghijkl\xB3nrtvwz\xBF]a subst:sg:dat.loc:f MNTo M a ie [^cdrs]za subst:sg:dat.loc:f +MNTo M a ie [^o]va subst:sg:dat.loc:f MNTo M a ie [^o]wa subst:sg:dat.loc:f MNTo M a o [^l]a subst:sg:voc:f MNTo M a o [^u]la subst:sg:voc:f MNTo M a y [^o]wa subst:sg:gen:f -MNTo M a y [bcdfh\xB3mprstz\xBF]a subst:sg:dat.loc:f +MNTo M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:dat.loc:f MNTo M a ze [^a]ra subst:sg:dat.loc:f MNTo M a ze [^i]ara subst:sg:dat.loc:f MNTo M a zie [^z]da subst:sg:dat.loc:f @@ -24585,15 +24828,16 @@ MNTo N a om [^w]a subst:pl:dat:m MNTo T a \xF3w a subst:pl:gen:m MNTo o a owie a subst:pl:nom:m1 -MNToq M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f +MNToq M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f MNToq M a o [^l]a subst:sg:voc:f -MNToq M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +MNToq M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f MNToq M a ze [^a]ra subst:sg:dat.loc:f MNToq M a zie [^z]da subst:sg:dat.loc:f MNToq M a \xB1 a subst:sg:inst:m MNToq M a \xEA [^w]a subst:sg:acc:f MNToq M ka ce ka subst:sg:dat.loc:f MNToq M sta \xB6cie [^a]sta subst:sg:dat.loc:f +MNT M sta \xB6cie [^a]sta subst:sg:dat.loc:f MNToq M ta cie [^s]ta subst:sg:dat.loc:f MNToq MNToq 0 0 subst:sg:nom:f MNToq N 0 ch [^w]a subst:pl:loc:m @@ -24615,9 +24859,9 @@ MNTos T \xE6 ci\xF3w \xE6 subst:pl:gen:m MNTos o \xE6 ciowie \xE6 subst:pl:nom:m1 MNTos s \xE6 cie \xE6 subst:pl:nom:m -MNTq M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:m +MNTq M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:m MNTq M a o [^l]a subst:sg:voc:m1 -MNTq M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:m +MNTq M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:m MNTq M a ze [^a]ra subst:sg:dat:m1 MNTq M a zie [^z]da subst:sg:dat.loc:m1 MNTq M a \xB1 a subst:sg:inst:m @@ -24639,17 +24883,19 @@ MNTq q ka cy ka subst:pl:nom:m1 MNTq q sta \xB6ci sta subst:pl:nom:m1 MNTq q ta ci [^s]ta subst:pl:nom:m1 -MNm M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f -MNm M a ie [^cdghijkl\xB3nrtzw\xBF]a subst:sg:dat.loc:f +MNm M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f +MNm M a ie [^cdghijkl\xB3nrtvwz\xBF]a subst:sg:dat.loc:f MNm M a ie [^cdrs]za subst:sg:dat.loc:f MNm M a ie [^cfilt]owa subst:sg:dat.loc:f +MNm M a ie [^o]va subst:sg:dat.loc:f MNm M a ie [^o]wa subst:sg:dat.loc:f MNm M a ie [^sz]na subst:sg:dat.loc:f +MNm M a ie rzna subst:sg:dat.loc:f MNm M a ie szna subst:sg:dat.loc:f MNm M a o [^l]a subst:sg:voc:f MNm M a y [^cfilt]owa subst:sg:gen:f MNm M a y [^o]wa subst:sg:gen:f -MNm M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +MNm M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f MNm M a y na subst:sg:gen:f MNm M a ze [^a]ra subst:sg:dat.loc:f MNm M a zie [^z]da subst:sg:dat.loc:f @@ -24675,6 +24921,7 @@ MNm N a om [^w]a subst:pl:dat:f MNm m ba eb [^\xEAo\xB6\xBC]ba subst:pl:gen:f MNm m ka ek [^\xE6\xEAo\xB6\xF1\xBC]ka subst:pl:gen:f +MNTm m ka ek [^\xE6\xEAo\xB6\xF1\xBC]ka subst:pl:gen:m1 MNm m na en [^mnow]na subst:pl:gen:f MNm m na ien [mnw]na subst:pl:gen:f MNm m oba \xF3b oba subst:pl:gen:f @@ -24702,15 +24949,16 @@ MNm m \xF1ka niek \xF1ka subst:pl:gen:f MNm m \xB6ka siek \xB6ka subst:pl:gen:f MNm m \xBCka ziek \xBCka subst:pl:gen:f -MNmn M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f -MNmn M a ie [^cdghijkl\xB3nrtzw\xBF]a subst:sg:dat.loc:f +MNmn M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f +MNmn M a ie [^cdghijkl\xB3nrtvwz\xBF]a subst:sg:dat.loc:f MNmn M a ie [^cfilt]owa subst:sg:dat.loc:f +MNmn M a ie [^o]va subst:sg:dat.loc:f MNmn M a ie [^o]wa subst:sg:dat.loc:f MNmn M a ie [^sz]na subst:sg:dat.loc:f MNmn M a o [^l]a subst:sg:voc:f MNmn M a y [^cfilt]owa subst:sg:gen:f MNmn M a y [^o]wa subst:sg:gen:f -MNmn M a y [bcdfh\xB3mprstz\xBF]a subst:sg:gen:f +MNmn M a y [bcdfh\xB3mprstvz\xBF]a subst:sg:gen:f MNmn M a y na subst:sg:gen:f MNmn M a ze [^a]ra subst:sg:dat.loc:f MNmn M a zie [^z]da subst:sg:dat.loc:f @@ -24751,10 +24999,11 @@ MNmn m \xEAba \xB1b \xEAba subst:pl:gen:f MNmn n a .a subst:pl:gen:f MNmn n a [^z]a subst:pl:gen:f -MNn M a i [^bcdfh\xB3mnprstwz\xBF]a subst:sg:gen:f -MNn M a ie [^cdghijkl\xB3nrtzw\xBF]a subst:sg:dat.loc:f +MNn M a i [^bcdfh\xB3mnprstvwz\xBF]a subst:sg:gen:f +MNn M a ie [^cdghijkl\xB3nrtvwz\xBF]a subst:sg:dat.loc:f MNn M a ie [^cdrs]za subst:sg:dat.loc:f MNn M a ie [^cf... [truncated message content] |