Начну с примера:JAVA - класс дизайн для н-г
Конец близок. Я закончу тебя.
Я хочу устранить строку «end», используя n-граммы. Так что у меня есть сейчас:
abstract class Ngram {...}
public class Bigram extends Ngram {...}
public class Trigram extends Ngram {...}
Биграммные: [, конец], [конец, есть]; [будет, конец], [конец, вы] Trigram: [the, end, is], [end, is near]; [I, will, end], [will, end, you]
Однако теперь я думаю, что это может быть хорошей идеей не просто считать Биграмм, Триграмм и т. Д. В целом, но и различать Биграммы с двусмысленным словом AW в положении = 0 и те, в которых AW находится в положении = 1, триграммы с AW в pos = 0, 1, 2 и т. Д.
Это означало бы, что я мог бы создать дополнительные классы: вместо того, чтобы один класс Биграммные, который представляет все биграмм найденные в тексте, я мог бы
abstract class Bigram {...}
public class BigramWithAmbigWordAt0 extends Bigram {...}
public class BigramWithAmbigWordAt1 extends Bigram {...}
Теперь, мой вопрос (ы):
- это слишком много? Если я это сделаю, мне не нужно проверять положение AW при использовании объектов Bigram; с другой стороны, я получаю много классов с небольшим (дополнительным) контентом.
- Есть ли какая-то эвристика, которая помогает мне «решить» эту проблему? Код должен быть быстрым, удобочитаемым, надежным ... что это лучший способ сделать это? Какой-то жадный подход, когда вы просто продолжаете создавать классы, пока они добавляют что-то новое, сколь бы незначительным оно ни было?
Это то, что у меня есть сейчас, Ngramfactory, который создает Bigrams, Trigrams ... в зависимости от целого числа n. –
Bigram/Trigram/Quadgram (это слово для этого?) Не должны быть отдельными классами - я бы, вероятно, просто использовал класс Ngram, который принимает параметры и имеет методы. Логика, вероятно, подобна (если не идентична), так что создание отдельных классов не стоит усилий. – MarkDacek