rallback on wrong version of morphology, adding interafce for morphology

git-svn-id: https://russianmorphology.googlecode.com/svn/trunk@88 d817d54c-26ab-11de-abc9-2f7d1455ff7a
This commit is contained in:
alexander.a.kuznetsov
2009-11-17 14:03:59 +00:00
parent 16613c543b
commit 1273cf96ed
19 changed files with 263 additions and 1145 deletions

View File

@ -31,9 +31,9 @@ import java.util.*;
public class DictonaryReader {
private String fileName;
private String fileEncoding = "windows-1251";
protected List<List<FlexiaModel>> wordsFlexias = new ArrayList<List<FlexiaModel>>();
protected List<List<String>> wordPrefixes = new ArrayList<List<String>>();
protected Set<String> ingnoredForm = new HashSet<String>();
private List<List<FlexiaModel>> wordsFlexias = new ArrayList<List<FlexiaModel>>();
private List<List<String>> wordPrefixes = new ArrayList<List<String>>();
private Set<String> ingnoredForm = new HashSet<String>();
public DictonaryReader(String fileName, Set<String> ingnoredForm) {
this.fileName = fileName;
@ -57,7 +57,7 @@ public class DictonaryReader {
}
protected void readWords(BufferedReader reader, WordProccessor wordProccessor) throws IOException {
private void readWords(BufferedReader reader, WordProccessor wordProccessor) throws IOException {
String s = reader.readLine();
int count = Integer.valueOf(s);
for (int i = 0; i < count; i++) {
@ -81,7 +81,7 @@ public class DictonaryReader {
}
protected void sckipBlock(BufferedReader reader) throws IOException {
private void sckipBlock(BufferedReader reader) throws IOException {
String s = reader.readLine();
int count = Integer.valueOf(s);
for (int i = 0; i < count; i++) {
@ -90,7 +90,7 @@ public class DictonaryReader {
}
protected void readPrefix(BufferedReader reader) throws IOException {
private void readPrefix(BufferedReader reader) throws IOException {
String s = reader.readLine();
int count = Integer.valueOf(s);
for (int i = 0; i < count; i++) {
@ -99,7 +99,7 @@ public class DictonaryReader {
}
}
protected void readFlexias(BufferedReader reader) throws IOException {
private void readFlexias(BufferedReader reader) throws IOException {
String s = reader.readLine();
int count = Integer.valueOf(s);
for (int i = 0; i < count; i++) {
@ -112,7 +112,7 @@ public class DictonaryReader {
}
}
protected void addFlexia(ArrayList<FlexiaModel> flexiaModelArrayList, String line) {
private void addFlexia(ArrayList<FlexiaModel> flexiaModelArrayList, String line) {
String[] fl = line.split("\\*");
// we inored all forms thats
if (fl.length == 3) {

View File

@ -1,5 +1,5 @@
/**
* Copyright 2009 Alexander Kuznetsov
* Copyright 2009 Alexander Kuznetsov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -60,28 +60,6 @@ public class FlexiaModel {
@Override
public String toString() {
return prefix + " " + suffix + " " + code;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
FlexiaModel that = (FlexiaModel) o;
if (code != null ? !code.equals(that.code) : that.code != null) return false;
if (prefix != null ? !prefix.equals(that.prefix) : that.prefix != null) return false;
if (suffix != null ? !suffix.equals(that.suffix) : that.suffix != null) return false;
return true;
}
@Override
public int hashCode() {
int result = code != null ? code.hashCode() : 0;
result = 31 * result + (suffix != null ? suffix.hashCode() : 0);
result = 31 * result + (prefix != null ? prefix.hashCode() : 0);
return result;
return prefix + " " + suffix;
}
}

View File

@ -1,139 +0,0 @@
/**
* Copyright 2009 Alexander Kuznetsov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.morphology.dictionary;
import org.apache.lucene.morphology.PrefixRule;
import java.util.*;
import java.io.*;
public class PrefixesRulesBuilder extends DictonaryReader {
private GrammaReader grammaInfo;
private Map<FlexiaModel,Set<FlexiaModel>> rules = new HashMap<FlexiaModel,Set<FlexiaModel>>();
public PrefixesRulesBuilder(String fileName, String fileEncoding, Set<String> ingnoredForm) throws IOException {
super(fileName, fileEncoding, ingnoredForm);
grammaInfo = new GrammaReader("dictonary/Dicts/Morph/rgramtab.tab");
}
@Override
public void proccess(WordProccessor wordProccessor) throws IOException {
super.proccess(wordProccessor);
System.out.println(rules.size());
System.out.println(rules);
}
public List<PrefixRule> getPrefixRules(){
List<PrefixRule> prefixRules = new ArrayList<PrefixRule>();
for(FlexiaModel key:rules.keySet()){
PrefixRule prefixRule = new PrefixRule();
prefixRule.setPrefix(key.getPrefix());
prefixRule.setLastLetter(key.getSuffix().charAt(0));
HashSet<Short> map = new HashSet<Short>();
for(FlexiaModel fm:rules.get(key)){
int gi = grammaInfo.getGrammInversIndex().get(fm.getCode());
map.add((short) gi);
}
prefixRule.setForms(map);
prefixRules.add(prefixRule);
}
return prefixRules;
}
@Override
protected void readWords(BufferedReader reader, WordProccessor wordProccessor) throws IOException {
sckipBlock(reader);
}
@Override
protected void readPrefix(BufferedReader reader) throws IOException {
sckipBlock(reader);
}
@Override
protected void readFlexias(BufferedReader reader) throws IOException {
super.readFlexias(reader);
//todo research flesias
for(List<FlexiaModel> fmList:wordsFlexias){
research(fmList);
}
}
private void research(List<FlexiaModel> models) {
for(FlexiaModel fm:models){
if(fm.getPrefix().length() > 0){
testFlexia(models, fm);
}
}
}
private void testFlexia(List<FlexiaModel> models, FlexiaModel fm) {
for(FlexiaModel com:models){
if(com.getSuffix().equals(fm.getSuffix()) && com.getPrefix().length() == 0){
Set<FlexiaModel> models1 = rules.get(convertForKey(fm));
if(models1 == null){
models1 = new HashSet<FlexiaModel>();
rules.put(convertForKey(fm),models1);
}
models1.add(convert(com));
}
}
}
private FlexiaModel convert(FlexiaModel fm){
String suf = fm.getSuffix();
//if(suf.length() == 1) System.out.println(fm);
return new FlexiaModel(fm.getCode(),""+ suf.charAt(suf.length()-1),fm.getPrefix());
}
private FlexiaModel convertForKey(FlexiaModel fm){
String suf = fm.getSuffix();
//if(suf.length() == 1) System.out.println(fm);
return new FlexiaModel("pr",""+ suf.charAt(suf.length()-1),fm.getPrefix());
}
protected void addFlexia(ArrayList<FlexiaModel> flexiaModelArrayList, String line) {
String[] fl = line.split("\\*");
if (fl.length == 3) {
flexiaModelArrayList.add(new FlexiaModel(fl[1], fl[0].toLowerCase(), fl[2].toLowerCase()));
}
if (fl.length == 2) flexiaModelArrayList.add(new FlexiaModel(fl[1], fl[0].toLowerCase(), ""));
}
public void savePrefixes(String fileName) throws IOException {
OutputStreamWriter writer = new OutputStreamWriter(new FileOutputStream(fileName), "UTF-8");
List<PrefixRule> prefixRuleList = getPrefixRules();
writer.write(prefixRuleList.size()+"\n");
for(PrefixRule pr: prefixRuleList){
writePrefixRule(writer, pr);
}
writer.close();
}
private void writePrefixRule(OutputStreamWriter writer, PrefixRule pr) throws IOException {
writer.write(pr.getPrefix()+"\n");
writer.write(pr.getLastLetter()+"\n");
HashSet<Short> formInfo = pr.getForms();
writer.write(formInfo.size()+"\n");
for(Short s:formInfo){
writer.write(s+"\n");
}
}
}

View File

@ -19,7 +19,7 @@ package org.apache.lucene.morphology.dictionary;
import org.apache.lucene.morphology.Heuristic;
import org.apache.lucene.morphology.LetterDecoderEncoder;
import org.apache.lucene.morphology.Morphology;
import org.apache.lucene.morphology.MorphologyImpl;
import java.io.IOException;
import java.util.*;
@ -119,7 +119,7 @@ public class StatiticsCollector implements WordProccessor {
prevSet = currentSet;
}
}
Morphology morphology = new Morphology(ints, rulesId, heuristics, grammaReader.getGrammaInfoAsArray());
MorphologyImpl morphology = new MorphologyImpl(ints, rulesId, heuristics, grammaReader.getGrammaInfoAsArray());
morphology.writeToFile(fileName);
}

View File

@ -1,39 +0,0 @@
/**
* Copyright 2009 Alexander Kuznetsov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.lucene.morphology.generator;
import org.apache.lucene.morphology.dictionary.*;
import java.io.IOException;
import java.util.HashSet;
public class RussianPrefixesBuilder {
public static void main(String[] args) throws IOException {
PrefixesRulesBuilder dictonaryReader = new PrefixesRulesBuilder("dictonary/Dicts/SrcMorph/RusSrc/morphs.mrd", "windows-1251",new HashSet<String>());
dictonaryReader.proccess(new WordProccessor() {
public void proccess(WordCard wordCard) throws IOException {
}
});
dictonaryReader.savePrefixes("russian/src/main/resources/org/apache/lucene/morphology/russian/prefixes.info");
}
}

View File

@ -1,372 +0,0 @@
[ ть
у
ем
ешь
ете
ет
ут
ла
ло
ли
я
ши
ем
емте
по ай
ь
по айте
ьте
ущий
ущего
ущему
ущего
ущий
ущим
ущем
ущая
ущей
ущей
ущую
ущей
ущею
ущей
ущее
ущего
ущему
ущее
ущим
ущем
ущие
ущих
ущим
ущих
ущие
ущими
ущих
ший
шего
шему
шего
ший
шим
шем
шая
шей
шей
шую
шей
шею
шей
шее
шего
шему
шее
шим
шем
шие
ших
шим
ших
шие
шими
ших]
[ большой
большого
большому
большого
большой
большим
большом
большая
большой
большой
большую
большой
большою
большой
большое
большого
большому
большое
большим
большом
большие
больших
большим
больших
большие
большими
больших
велик
велика
велико
велики
больше
по больше
наи больший
наи большего
наи большему
наи большего
наи больший
наи большим
наи большем
наи большая
наи большей
наи большей
наи большую
наи большей
наи большею
наи большей
наи большее
наи большего
наи большему
наи большее
наи большим
наи большем
наи большие
наи больших
наи большим
наи больших
наи большие
наи большими
наи больших]
[ вероятный
вероятного
вероятному
вероятного
вероятный
вероятным
вероятном
вероятная
вероятной
вероятной
вероятную
вероятной
вероятною
вероятной
вероятное
вероятного
вероятному
вероятное
вероятным
вероятном
вероятные
вероятных
вероятным
вероятных
вероятные
вероятными
вероятных
вероятен
вероятна
вероятно
вероятны
вероятнее
вероятней
по вероятнее
по вероятней
вероятнейший
наи невероятнейший
вероятнейшего
наи невероятнейшего
вероятнейшему
наи невероятнейшему
вероятнейшего
наи невероятнейшего
вероятнейший
наи невероятнейший
вероятнейшим
наи невероятнейшим
вероятнейшем
наи невероятнейшем
вероятнейшая
наи невероятнейшая
вероятнейшей
наи невероятнейшей
вероятнейшей
наи невероятнейшей
вероятнейшую
наи невероятнейшую
вероятнейшей
вероятнейшею
наи невероятнейшей
наи невероятнейшею
вероятнейшей
наи невероятнейшей
вероятнейшее
наи невероятнейшее
вероятнейшего
наи невероятнейшего
вероятнейшему
наи невероятнейшему
вероятнейшее
наи невероятнейшее
вероятнейшим
наи невероятнейшим
вероятнейшем
наи невероятнейшем
вероятнейшие
наи невероятнейшие
вероятнейших
наи невероятнейших
вероятнейшим
наи невероятнейшим
вероятнейших
наи невероятнейших
вероятнейшие
наи невероятнейшие
вероятнейшими
наи невероятнейшими
вероятнейших
наи невероятнейших]
[ аленький
аленького
аленькому
аленького
аленький
аленьким
аленьком
аленькая
аленькой
аленькой
аленькую
аленькой
аленькою
аленькой
аленькое
аленького
аленькому
аленькое
аленьким
аленьком
аленькие
аленьких
аленьким
аленьких
аленькие
аленькими
аленьких
ал
ала
ало
алы
еньше
по еньше
алейший
наи еньший
алейшего
наи еньшего
алейшему
наи еньшему
алейшего
наи еньшего
алейший
наи еньший
алейшим
наи еньшим
алейшем
наи еньшем
алейшая
наи еньшая
алейшей
наи еньшей
алейшей
наи еньшей
алейшую
наи еньшую
алейшей
алейшею
наи еньшей
наи еньшею
алейшей
наи еньшей
алейшее
наи еньшее
алейшего
наи еньшего
алейшему
наи еньшему
алейшее
наи еньшее
алейшим
наи еньшим
алейшем
наи еньшем
алейшие
наи еньшие
алейших
наи еньших
алейшим
наи еньшим
алейших
наи еньших
алейшие
наи еньшие
алейшими
наи еньшими
алейших
наи еньших]
[ ьный
ьного
ьному
ьного
ьный
ьным
ьном
ьная
ьной
ьной
ьную
ьной
ьною
ьной
ьное
ьного
ьному
ьное
ьным
ьном
ьные
ьных
ьным
ьных
ьные
ьными
ьных
ен
ьна
ьно
ьны
ьны
ьнее
ьней
по ьнее
по ьней
наи ьнейший
наи ьнейшего
наи ьнейшему
наи ьнейшего
наи ьнейший
наи ьнейшим
наи ьнейшем
наи ьнейшая
наи ьнейшей
наи ьнейшей
наи ьнейшую
наи ьнейшей
наи ьнейшею
наи ьнейшей
наи ьнейшее
наи ьнейшего
наи ьнейшему
наи ьнейшее
наи ьнейшим
наи ьнейшем
наи ьнейшие
наи ьнейших
наи ьнейшим
наи ьнейших
наи ьнейшие
наи ьнейшими
наи ьнейших]