TryCountEdgeTermsByGroup
(
IGraph oGraph,
WordMetricUserSettings oWordMetricUserSettings,
WordCounter oWordCounter,
WordPairCounter oWordPairCounter,
HashSet<String> oUniqueImportedIDs,
out GraphMetricColumn [] oGraphMetricColumns
)
{
Debug.Assert(oGraph != null);
Debug.Assert(oWordMetricUserSettings != null);
Debug.Assert(oWordCounter != null);
Debug.Assert(oWordPairCounter != null);
AssertValid();
List<GraphMetricValueOrdered> oWordWordValues, oWordCountValues,
oWordSalienceValues;
List<GraphMetricValueOrdered> oWordPairWord1Values,
oWordPairWord2Values, oWordPairCountValues,
oWordPairSalienceValues, oWordPairMutualInformationValues;
CreateGraphMetricValueLists(
out oWordWordValues, out oWordCountValues, out oWordSalienceValues,
out oWordPairWord1Values, out oWordPairWord2Values,
out oWordPairCountValues, out oWordPairSalienceValues,
out oWordPairMutualInformationValues
);
List<GraphMetricValueOrdered> oWordGroupNameValues =
new List<GraphMetricValueOrdered>();
List<GraphMetricValueOrdered> oWordPairGroupNameValues =
new List<GraphMetricValueOrdered>();
// Get the edges in each of the graph's groups. Include a "dummy"
// group that contains the edges that aren't contained in any real
// groups.
foreach ( GroupEdgeInfo oGroupEdgeInfo in
GroupEdgeSorter.SortGroupEdges(oGraph, Int32.MaxValue,
true, true) )
{
// Count the terms in this group.
oWordCounter.Clear();
oWordPairCounter.Clear();
foreach ( IEdge oEdge in EnumerateEdgesOrVertices(
oGroupEdgeInfo.Edges, true, oGraph, oUniqueImportedIDs) )
{
CountTermsInEdgeOrVertex(oEdge,
oWordMetricUserSettings.TextColumnName, oWordCounter,
oWordPairCounter);
}
oWordCounter.CalculateSalienceOfCountedTerms();
oWordPairCounter.CalculateSalienceOfCountedTerms();
oWordPairCounter.CalculateMutualInformationOfCountedTerms();
// Transfer the words and word pairs to the graph metric value
// lists.
String sGroupName = oGroupEdgeInfo.GroupName;
AddCountedWordsToValueLists( oWordCounter.CountedTerms,
oWordMetricUserSettings, sGroupName, oWordWordValues,
oWordCountValues, oWordSalienceValues, oWordGroupNameValues);
AddCountedWordPairsToValueLists( oWordPairCounter.CountedTerms,
oWordMetricUserSettings, sGroupName, oWordPairWord1Values,
oWordPairWord2Values, oWordPairCountValues,
oWordPairSalienceValues, oWordPairMutualInformationValues,
oWordPairGroupNameValues);
if (
sGroupName == GroupEdgeSorter.DummyGroupNameForEntireGraph
&&
oUniqueImportedIDs != null
)
{
// This is the dummy group that stores all the edges in the
// graph. Note that SortGroupEdges() guarantees that this is
// the first group, so the imported IDs need to be cleared only
// once within this loop.
oUniqueImportedIDs.Clear();
}
}
oGraphMetricColumns = CreateGraphMetricColumns(
oWordWordValues, oWordCountValues, oWordSalienceValues,
oWordGroupNameValues,
oWordPairWord1Values, oWordPairWord2Values, oWordPairCountValues,
oWordPairSalienceValues, oWordPairMutualInformationValues,
oWordPairGroupNameValues
);
return (true);
}