Продолжайте работу в том же проекте.
N-грамма — это N соседних слов в одном предложении. 2-граммы называют биграммами. 3-граммы — триграммами.
Например, из текста: «She stood up. Then she left.» можно выделить следующие биграммы «she stood», «stood up», «then she» и «she left», но не «up then». И две триграммы «she stood up» и «then she left», но не «stood up then».
По списку предложений, составленному в прошлой задаче, составьте словарь самых частотных продолжений биграмм и триграмм. Это словарь, ключами которого являются все возможные начала биграмм и триграмм, а значениями — их самые частотные продолжения.
Более формально так:
Для каждой пары (key, value) из словаря должно выполняться одно из следующих условий:
- В тексте есть хотя бы одна биграмма (key, value), и для любой другой присутствующей в тексте биграммы (key, otherValue), начинающейся с того же слова, value должен быть лексикографически меньше otherValue.
- Либо в тексте есть хотя бы одна триграмма (w1, w2, value), такая что
w1 + " " + w2 == key
и для любой другой присутствующей в тексте триграммы (w1, w2, otherValue), начинающейся с той же пары слов, value должен быть лексикографически меньше otherValue.
Для лексикографического сравнения используйте встроенный в .NET способ сравнения Ordinal, например с помощью метода string.CompareOrdinal.
Такой словарь назовём N-граммной моделью текста.
Реализуйте этот алгоритм в классе FrequencyAnalysisTask
.
Все вопросы и детали уточняйте с помощью примера ниже и тестов.
Пример
По тексту a b c d. b c d. e b c a d.
должен быть составлен такой словарь:
1 |
<span role="presentation"><span class="cm-string">"a"</span>: <span class="cm-string">"b"</span></span> |
1 |
<span role="presentation"><span class="cm-string">"b"</span>: <span class="cm-string">"c"</span></span> |
1 |
<span role="presentation"><span class="cm-string">"c"</span>: <span class="cm-string">"d"</span></span> |
1 |
<span role="presentation"><span class="cm-string">"e"</span>: <span class="cm-string">"b"</span></span> |
1 |
<span role="presentation"><span class="cm-string">"a b"</span>: <span class="cm-string">"c"</span></span> |
1 |
<span role="presentation"><span class="cm-string">"b c"</span>: <span class="cm-string">"d"</span></span> |
1 |
<span role="presentation"><span class="cm-string">"e b"</span>: <span class="cm-string">"c"</span></span> |
1 |
<span role="presentation"><span class="cm-string">"c a"</span>: <span class="cm-string">"d"</span></span> |
Обратите внимание:
- из двух биграмм «a b» и «a d», встречающихся однократно, в словаре есть только пара «a»: «b», как лексикографически меньшая.
- из двух встречающихся в тексте биграмм «c d» и «c a» в словаре есть только более частотная пара «c»: «d».
- из двух триграмм «b c d» и «b c a» в словаре есть только более частотная «b c»: «d».
1 2 3 4 5 6 7 |
using System.Collections.Generic; using System.Linq; namespace TextAnalysis { static class FrequencyAnalysisTask { |
Стоимость решения этой задачи всего 100 рублей, купи решения у меня 🙂