Skip to content

Commit 9f79416

Browse files
authored
Fix LT-21945: Different modes for parsing vs. glossing (#330)
1 parent 0eb28b5 commit 9f79416

File tree

2 files changed

+46
-3
lines changed

2 files changed

+46
-3
lines changed

src/SIL.LCModel/DomainServices/AnalysisGuessServices.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,21 @@ public class AnalysisGuessServices
2929
///
3030
/// </summary>
3131
/// <param name="cache"></param>
32-
public AnalysisGuessServices(LcmCache cache)
32+
public AnalysisGuessServices(LcmCache cache) : this(cache, false)
33+
{
34+
}
35+
36+
/// <summary>
37+
///
38+
/// </summary>
39+
/// <param name="cache"></param>
40+
/// <param name="prioritizeParser">whether parser approval should be prioritized over human approval</param>
41+
public AnalysisGuessServices(LcmCache cache, bool prioritizeParser)
3342
{
3443
Cache = cache;
3544
m_emptyWAG = new EmptyWAG();
3645
m_nullWAG = new NullWAG();
46+
PrioritizeParser = prioritizeParser;
3747
}
3848

3949
/// <summary>
@@ -57,6 +67,8 @@ public enum OpinionAgent
5767

5868
public AnalysisOccurrence IgnoreOccurrence { get; set; }
5969

70+
public bool PrioritizeParser { get; set; }
71+
6072
LcmCache Cache { get; set; }
6173

6274
// PriorityCount provides a count of the number of times an analysis
@@ -644,6 +656,21 @@ private void AddAnalysisCount(IAnalysis context, IAnalysis analysis, int priorit
644656
/// </summary>
645657
private int ComparePriorityCounts(IAnalysis a1, IAnalysis a2, AnalysisOccurrence occurrence, ContextCount contextCount)
646658
{
659+
if (PrioritizeParser)
660+
{
661+
// Sort by parser approval.
662+
IWfiAnalysis wfi1 = a1 as IWfiAnalysis;
663+
IWfiAnalysis wfi2 = a2 as IWfiAnalysis;
664+
if (wfi1 != null && wfi2 != null)
665+
{
666+
int p1 = IsParserApproved(wfi1) ? 3 : IsParserDisapproved(wfi1) ? 1 : 2;
667+
int p2 = IsParserApproved(wfi2) ? 3 : IsParserDisapproved(wfi2) ? 1 : 2;
668+
if (p1 < p2)
669+
return 1;
670+
if (p1 > p2)
671+
return -1;
672+
}
673+
}
647674
// Compare contexted counts.
648675
if (occurrence != null)
649676
{

tests/SIL.LCModel.Tests/DomainServices/AnalysisGuessServicesTests.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,12 +61,12 @@ internal enum Flags
6161

6262
LcmCache Cache { get; set; }
6363

64-
internal AnalysisGuessBaseSetup(LcmCache cache) : this()
64+
internal AnalysisGuessBaseSetup(LcmCache cache, bool prioritizeParser = false) : this()
6565
{
6666
Cache = cache;
6767
UserAgent = Cache.LanguageProject.DefaultUserAgent;
6868
ParserAgent = Cache.LangProject.DefaultParserAgent;
69-
GuessServices = new AnalysisGuessServices(Cache);
69+
GuessServices = new AnalysisGuessServices(Cache, prioritizeParser);
7070
EntryFactory = Cache.ServiceLocator.GetInstance<ILexEntryFactory>();
7171
DoDataSetup();
7272
}
@@ -1251,6 +1251,22 @@ public void ExpectedGuess_PreferUserApprovedAnalysisOverParserApprovedAnalysis()
12511251
}
12521252
}
12531253

1254+
/// <summary>
1255+
/// </summary>
1256+
[Test]
1257+
public void ExpectedGuess_PreferParserApprovedAnalysisOverUserApprovedAnalysis()
1258+
{
1259+
using (var setup = new AnalysisGuessBaseSetup(Cache, true))
1260+
{
1261+
var newWagParserApproves = WordAnalysisOrGlossServices.CreateNewAnalysisWAG(setup.Words_para0[1]);
1262+
var newWagHumanApproves = WordAnalysisOrGlossServices.CreateNewAnalysisWAG(setup.Words_para0[1]);
1263+
setup.ParserAgent.SetEvaluation(newWagParserApproves.Analysis, Opinions.approves);
1264+
setup.UserAgent.SetEvaluation(newWagHumanApproves.Analysis, Opinions.approves);
1265+
var guessActual = setup.GuessServices.GetBestGuess(setup.Words_para0[1]);
1266+
Assert.AreEqual(newWagParserApproves.Analysis, guessActual);
1267+
}
1268+
}
1269+
12541270
/// <summary>
12551271
/// Prefer analyses that are in the right context over analyses that are not.
12561272
/// </summary>

0 commit comments

Comments
 (0)