[英]JAVA - class design for n-grams
我將從一個例子開始:
盡頭快到了。 我會結束你
我想用n-gram消除字符串“end”的歧義。 所以我現在擁有的是:
abstract class Ngram {...}
public class Bigram extends Ngram {...}
public class Trigram extends Ngram {...}
Bigram :[結束],[結束,是]; [將,結束],[結束,你] Trigram :[結束,是],[結束,接近]; [我,將,結束],[會,結束,你]
然而,現在我認為不僅可以計算Bigrams,Trigrams等一般,而且還可以區分Bigrams與位置= 0處的模糊詞AW和AW位置= 1的詞。 ,AW在pos = 0,1,2等處的Trigrams。
這意味着我可以創建其他類:而不是一個代表文本中找到的所有Bigrams的Bigram類,我可以擁有
abstract class Bigram {...}
public class BigramWithAmbigWordAt0 extends Bigram {...}
public class BigramWithAmbigWordAt1 extends Bigram {...}
現在,我的問題:
單個課程就足夠了。 你只需要該類中的變量:
public class Ngram
{
public int n;
public int ambiguousWordPosition;
public String sentence;
public Ngram(int n, int ambiguousWordPosition, String sentence)
{
this.n = n;
this.ambiguousWordPosition = ambiguousWordPosition;
this.sentence = sentence;
}
}
然后你可以消除歧義:
public ArrayList<ArrayList<String>> disambiguate(String word)
{
ArrayList<ArrayList<String>> outer = new ArrayList<ArrayList<String>>();
String[] words = sentence.split("\\s+");
int cutoff = n-1;
for (int i = 0; i < words.length - cutoff; i++) {
if(words[i + ambiguousWordPosition].equals(word)) {
ArrayList<String> inner = new ArrayList<String>();
for(int j = i; j < i + cutoff; j++){
inner.add(words[j]);
}
outer.add(inner);
}
}
return outer;
}
注意 :將其視為偽代碼。 我自己沒有測試過,但你應該能夠理解它
我不完全確定你在做什么,但聽起來最好可能使用N-gram類並將N(整數)和AW作為參數發送給構造函數。 如果您計划擴展或重復使用,那將是一個更好的設計。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.