java定义文章的难度系数

本文定义文章的难度系数为:平均句长难度系数+常用字难度系数。

思路:

(1)统计文章中。!?的数量来确定句子数,句子数除以总字符数即为平均句长,即可得到一个测评标准(句长);

(2)保存一个常用500字.txt文档库,用需要判定的文章逐字与常用500字.txt文档进行比较,得到文章的常用字数量,再除以总字符数即可得到另一个测评标准(常用字比例);

(3)设置对应的难度系数。

注:

(本次任务测试了5篇文档,分别是《三体》节选、《小石潭 记》、《荷塘月色》、《西游记》、《南渡北归》。)

其句长和常用字比例计算结果如下图所示。
在这里插入图片描述
由上可知:句长大多分布在15~20之间,常用字比例大多占70%左右。

其中句长难度系数的设置为:1星(0,10],2星(10,15],3星(15,23],4星(23,30],5星(30,+无穷)。

常用字难度系数的设置为:1星(0.8,1],2星(0.7,0.8],3星(0.6,0.7],4星(0.4,0.6],5星(0,0.4]。

但是,由于所选样本较少,所以设置难度系数的参数不够准确,后续还需要改进。

常用500字.txt:
在这里插入图片描述

代码如下:

//文件名:Diff.java
import java.io.*;
import java.util.*;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

class Diff
{
	public static void main(String[] args) throws Exception
	{
		File file1 = new File(args[0]);//创建一个文件对象
		BufferedReader br1=new BufferedReader(new FileReader(file1));  定义字符读取流
		String value1 = null; 							//定义一个临时接收文件中的字符串变量
        String newValue1 ="";    						//接收文件中所有字符串的变量
		int hzcount=0,bdcount=0;
        while((value1 = br1.readLine())!= null)			//开始读取文件中的字符
		{    	 	
			newValue1 = newValue1 + value1;    			//把全部字符存入newValue1变量中
			//统计句子数
			for(int i=0;i<value1.length();i++)			
			{
				String s=Character.toString(value1.charAt(i));//把char型转换成String型
				if(s.equals("。")||s.equals("!")||s.equals("?"))
				{
					bdcount++;
				}
			}
        }
		//统计汉字
		Pattern p=Pattern.compile("[\\u4e00-\\u9fa5]");//匹配汉字
		Matcher m=p.matcher(newValue1);
		while(m.find())//统计汉字个数
		{
			//System.out.println(m.group(0));//输出不带标点的全部汉字
			hzcount++;
		}
		//System.out.println("汉字数:"+hzcount+"   句子数:"+bdcount);
		/*1.以句长来定义难度系数*/
		double jc=(double)hzcount/(double)bdcount;
		//System.out.println("平均句长:"+jc);//输出平均句长
		int n1=0;	
		if(jc>0&&jc<=10)
		{
			n1=1;
		}
		else if(jc>10&&jc<=15)
		{
			n1=2;
		}
		else if(jc>15&&jc<=23)
		{
			n1=3;
		}
		else if(jc>23&&jc<=30)
		{
			n1=4;
		}
		else if(jc>30)
		{
			n1=5;
		}
		System.out.println("句长难度系数(5星):"+n1+"星");
		/*2.以常用字的数量来定义难度系数*/
		BufferedReader br2=new BufferedReader(new FileReader("常用500字.txt"));  定义字符读取流,读取“常用500字.txt”
		String value2 = null; 							//定义一个临时接收文件中的字符串变量
        String newValue2 ="";    						//接收文件中所有字符串的变量
        while((value2 = br2.readLine())!= null)			//开始读取文件中的字符
		{    	 	
			newValue2 = newValue2 + value2;    			//存入newValue2变量中
        }
		int cycount=0;
		for(int i=0;i<newValue1.length();i++)//统计读取文章常用字的个数
		{
			for(int j=0;j<newValue2.length();j++)//文章中的汉字逐个与常用字库进行对比
			{
				if((newValue1.charAt(i))==(newValue2.charAt(j)))//如果相同则计数
				{
					cycount++;
				}
			}
		}
		double cyz=(double)cycount/(double)hzcount;//难度系数n2=文章中常用字数除以文章总字数
		int n2=0;	
		if(cyz>0&&cyz<=0.4)
		{
			n2=5;
		}
		else if(cyz>0.4&&cyz<=0.6)
		{
			n2=4;
		}
		else if(cyz>0.6&&cyz<=0.7)
		{
			n2=3;
		}
		else if(cyz>0.7&&cyz<=0.8)
		{
			n2=2;
		}
		else if(cyz>0.8)
		{
			n2=1;
		}
		//System.out.println("常用字比例:"+cyz);//输出常用字比例
		System.out.println("常用字难度系数(5星):"+n2+"星");
		System.out.println(file1+"   的难度系数为:"+(n1+n2)+"星");
	}
}

结果如下:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值