【问题标题】:Creating arrays to separate speakers in a dialogue and then counting the words that each specific person said.创建数组以分隔对话中的说话者,然后计算每个特定人所说的话。
【发布时间】:2014-05-15 14:13:40
【问题描述】:

我正在尝试创建一个程序,该程序将接受对话并将其分成扬声器,然后计算他们在整个对话中说了多少字。

考虑以下示例;

乔治

今天我们将讨论这个话题。

玛丽

这是一个非常有趣的话题。

乔治

好的,让我们开始吧。

这在许多不同的情况下都是相关的。

所以,我希望这个输出是:

乔治

总字数:12

玛丽

总字数:6

罗伯

总字数:7

此时,我唯一知道的是,我需要创建一个数组来填充大写名称,然后使用它来按说话者分隔对话,以便计算单词。

任何帮助将不胜感激,我熟悉数组,但我对字符串分析和操作的经验很少。

【问题讨论】:

标签: arrays vb.net string


【解决方案1】:

您可能不想使用数组 - Dictionary(Of String, Integer) 将是存储每个扬声器的字数的更好选择。代码是这样的:

Dim wordCounts As Dictionary(Of String, Integer) = new Dictionary(Of String, Integer)()
Dim currentSpeaker As String = Nothing

For Each line As String In File.ReadLines(dialogueFile)
    If line.Trim().Length > 0 AndAlso line.Trim() = line.Trim().ToUpper() Then
        ' Upper case lines are speakers
        currentSpeaker = line.Trim()
    Else
        If currentSpeaker Is Nothing Then
            Throw New Exception("No Speaker!")
        End If
        Dim wordCount As Integer = line.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries).Length
        If wordCounts.ContainsKey(currentSpeaker) Then
            wordCounts(currentSpeaker) += wordCount
        Else
            wordCounts.Add(currentSpeaker, wordCount)
        End If
    End If
Next

For Each count As KeyValuePair(Of String, Integer) In wordCounts
    Console.WriteLine("{0}: {1}", count.Key, count.Value)
Next

根据需要输出以下内容:

GEORGE: 12
MARY: 6
ROB: 7

【讨论】:

  • 谢谢,但我无法显示结果。我不熟悉 console.writeline 并且想知道是否可以将字典组件分配给表单上的文本框。另外,更具体一点,是否可以更改它以计算总字数并计算我可以随时选择的特定字数。例如,我能数出每个发言者说了多少次“今天”,在这种情况下,GEORGE 显示为 1,其他两个显示为 0。我没有使用字符串的经验,主要使用 vb 进行数学运算。谢谢您,也感谢您对未来的帮助!
  • 别在意显示的问题,我可以很好地编程。我现在对字典的使用有所了解,但我不知道必须读取字符串并将其与指定的单词匹配。
  • 要计算特定单词,请为单词创建一个变量 - Dim words = line.Split(New String() {" "}, StringSplitOptions.RemoveEmptyEntries),然后使用 For Each word In words 循环遍历单词。您将需要在某个地方存储每个单词的计数,因此您可能需要一个具有总计数和每个单词计数的类(作为Dictionary(Of String, Integer)),并在wordCounts 字典中使用它。如果您遇到困难,试一试并发布特定问题(带有代码) - Stack Overflow 不是人们免费为您工作的地方! ;-)
猜你喜欢
  • 2022-11-28
  • 2018-09-26
  • 2016-07-18
  • 1970-01-01
  • 2022-09-14
  • 2021-09-04
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多