计算诸葛亮《出师表》中一共出现了多少种汉字

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @author aachen0
 * @date 2018/4/4 20:18
 * IDE:IntelliJ IDEA
 * 练习:
 * 1、计算诸葛亮《出师表》中一共出现了多少种汉字,哪些汉字只出现一次,哪些汉字出现了多次,打印各汉字出现的次数。
 */
public class CountChar {
    public static void main(String[] args) {
        String text = "先帝创业未半而中道崩殂,今天下三分,益州疲弊,此诚危急存亡之秋也。然侍卫之臣不懈于内,忠志之士忘身于外者,盖追先帝之殊遇,欲报之于陛下也。诚宜开张圣听,以光先帝遗德,恢弘志士之气,不宜妄自菲薄,引喻失义,以塞忠谏之路也。 \n" +
                "宫中府中,俱为一体,陟罚臧否,不宜异同。若有作奸犯科及为忠善者,宜付有司论其刑赏,以昭陛下平明之理,不宜偏私,使内外异法也。 \n" +
                "侍中、侍郎郭攸之、费祎、董允等,此皆良实,志虑忠纯,是以先帝简拔以遗陛下。愚以为宫中之事,事无大小,悉以咨之,然后施行,必得裨补阙漏,有所广益。 \n" +
                "将军向宠,性行淑均,晓畅军事,试用之于昔日,先帝称之曰能,是以众议举宠为督。愚以为营中之事,悉以咨之,必能使行阵和睦,优劣得所。 \n" +
                "亲贤臣,远小人,此先汉所以兴隆也;亲小人,远贤臣,此后汉所以倾颓也。先帝在时,每与臣论此事,未尝不叹息痛恨于桓、灵也。侍中、尚书、长史、参军,此悉贞良死节之臣,愿陛下亲之信之,则汉室之隆,可计日而待也。 \n" +
                "臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。 \n" +
                "先帝知臣谨慎,故临崩寄臣以大事也。受命以来,夙夜忧叹,恐付托不效,以伤先帝之明,故五月渡泸,深入不毛。今南方已定,兵甲已足,当奖率三军,北定中原,庶竭驽钝,攘除奸凶,兴复汉室,还于旧都。此臣所以报先帝而忠陛下之职分也。至于斟酌损益,进尽忠言,则攸之、祎、允之任也。 \n" +
                "愿陛下托臣以讨贼兴复之效,不效,则治臣之罪,以告先帝之灵。若无兴德之言,则责攸之、祎、允等之慢,以彰其咎;陛下亦宜自谋,以咨诹善道,察纳雅言,深追先帝遗诏,臣不胜受恩感激。 \n" +
                "今当远离,临表涕零,不知所言。";
        Map<Character, Integer> chars = new HashMap<>();
        char temp;
        for (int i = 0; i < text.length(); i++) {
            temp = text.charAt(i);
            if ('\n' == temp || '' == temp || '' == temp) continue;// 跳过不需要统计的标点符号
            if (chars.containsKey(temp)) {
                chars.put(temp, chars.get(temp) + 1); // 如果键(字符)已经存在,则旧元素的值加1put进去覆盖旧元素
            } else chars.put(temp, 1); //没有重复的话直接put
        }
        Set<Character> keys = chars.keySet();
        String charSingle = ""; //定义一个字符串存储只出现了一次的字符
        // 遍历Map集合,输出统计结果
        for (Character c : keys) {
            System.out.println("汉字\"" + c + "\"出现了" + chars.get(c) + "");
            if (1 == chars.get(c)) charSingle += c + "";
        }
        
        System.out.println("一共出现了" + keys.size() + "种汉字,只出现了一次的汉字有:" + charSingle);
    }
}
<think>好的,用户需要分析《新三国演义》前30集中刘备和诸葛亮的共现频率或强度。首先,我得明确什么是“共现强度”。通常这可能指他们共同出现的场景次数、对话次数,或者更复杂的指标,比如时间共享比例。 第一步,需要获取前30集的剧本或字幕文件。可能需要搜索是否有公开的剧本资源,或者通过视频平台的字幕提取工具获取文本。如果找不到,可能需要手动记录,但这样比较费时。 接下来,定义共现的标准。比如,两人在同一场景中出现,或是有直接对话。不同的定义会影响统计结果。用户可能需要明确这一点,但问题中没有说明,所以得考虑常见方法。 然后,逐集分析。对于每集,检查每个场景是否有两人同时出现。记录出现的次数和时长。如果是按对话统计,需要找出他们对话的段落。可以用文本分析工具,比如Python的字符串处理库,或者自然语言处理库来识别角色名称。 可能需要编写代码自动化处理。例如,用正则表达式匹配角色名,统计他们在同一场景或相邻对话中的出现次数。比如,在字幕文件中,时间戳和对话交替出现,可以解析时间戳来计算共现时长。 举例,假设字幕文件中,每个条目有时间段和台词。提取所有同时包含“刘备”和“诸葛亮”的台词时间段,累加他们的时间长度。或者统计他们共同出现的场景次数。 此外,还要考虑别称,比如“玄德”、“孔明”等,避免漏检。可能需要建立角色别称列表,确保全面覆盖。 最后,计算结果并呈现。比如,共现次数占总场景的比例,或者总时长占前30集总时长的比例。还可以用公式表示,如共现强度=共现次数/总场景数,或者共现时长/总时长。 用户可能需要具体的步骤和工具推荐,比如推荐使用Python的pandas处理数据,或者用ffmpeg提取字幕。如果找不到公开数据,可能需要手动处理,但这样可行性低,所以重点放在如何利用现有工具自动化分析。 可能的问题包括如何高效处理视频文件、准确识别角色对话,以及处理不同版本的字幕格式。需要给出解决方案,比如使用SRT字幕解析库,或者推荐具体的文本处理代码示例。 最后,生成相关问题时要基于用户的分析目标,比如其他角色的共现、不同剧集的比较,或者更复杂的指标如情感分析互动情况。</think>通过角色共现分析可运用以下方法实现: **数据采集** 访问视频平台获取前30集SRT字幕文件或剧本文档 建立人物对白数据库,字段需包含集数、时间戳、说话角色、台词内容 **共现判定标准** 场景共现:两人同时出现在同一镜头超过10秒 对话共现:直接对话或交替发言间隔不超过30秒 **文本处理代码示例** ```python import re from collections import defaultdict co_occur = defaultdict(int) liubei_pattern = re.compile(r'刘备|玄德|皇叔') zhuge_pattern = re.compile(r'诸葛亮|孔明|卧龙') for episode in range(1,31): with open(f'srt/ep{episode}.srt', 'r', encoding='utf-8') as f: srt_content = f.read() # 解析时间码与对白 blocks = re.split(r'\n\n+', srt_content) for block in blocks: lines = block.strip().split('\n') if len(lines) >=3: timecode = lines[1] dialogue = ' '.join(lines[2:]) # 角色识别逻辑 if liubei_pattern.search(dialogue) and zhuge_pattern.search(dialogue): start, end = parse_timecode(timecode) # 自定义时间解析函数 duration = end - start co_occur[episode] += duration # 输出结果 total_duration = sum(co_occur.values()) print(f'前30集共现总时长:{total_duration//3600}小时{total_duration%3600//60}分钟') ``` **强度计算公式** 共现强度指数: $$I = \frac{T_{co}}{T_{total}} \times \frac{N_{co}}{N_{scene}}$$ $T_{co}$表示共现总时长 $T_{total}$为前30集总时长 $N_{co}$是共现场景数 $N_{scene}$为总场景数 **可视化呈现** 推荐使用时间线热力图展示每集共现强度变化,配合散点图表现对话密度分布。可采用matplotlib或Tableau实现动态可视化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aachen0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值