Learning from Bullying Traces in Social Media

1 摘要

网络欺凌(cyberbulling)是一种严重影响青少年身心健康的社交现象,而以往一些对于网络欺凌的社交研究总是被数据存在的隐私问题所阻碍。这篇工作的贡献首先是证明了社交软件的数据,通过合适的自然语言处理技术,能够成为研究网络欺凌的丰富数据来源,此外,我们提出了几个NLP的关键问题,包括文本分类,角色标记,情感分析和主题建模,并提供了基线结果。

2 数据集及处理

首先使用Twitter streaming API收集大量的社交数据,同时采用以下规则来筛选获得"enriched dataset":

  1. 必须包含预先确定好的负面关键词
  2. 句子中必须包含"bulling"
  3. 对于Twitter中,"RT"代表转发,故对于包含"RT"的数据应去掉。

下面使用Java代码进行实现:

static String[] keywords = {
    "ignored", "pushed", "rumors", "locker",
			"spread", "shoved", "rumor", "teased", "kicked", "crying",
			"bullied", "bully", "bullyed", "bullying", "bullyer", "bulling"};
public static boolean enRichMent(String line) {
   
		boolean containKeyword = false;
		String lowerCase = line.toLowerCase();
		for (String k : keywords)
			if (lowerCase.contains(k)) {
   
				containKeyword = true;
				break;
			}
		if (containKeyword == true && lowerCase.contains("bull")
				&& !line.contains("RT")) {
   
			return true;
		}
		return false;
}

3 模型及算法

对于摘要所涉及的NLP任务,均可以看成分类任务,故使用SVM算法进行实现,下面重点讲解欺凌检测问题,即二分类的文本分类问题。

首先预先选择了4524个词组作为特征,将每一个句子转化成4524个维度的词频向量进行SVM分类
故依次需要解决分词,word2vec,训练等问题。

3.1 分词

分词有很多经典算法,此处采用正则表达式进行匹配分词,其中需要做以下几个处理:

  1. 所有英文字符均转化为小写字母
  2. 对于句子中出现过的人名,均用"@USER"统一代替,同理,对于出现过的url链接,也均采用"HTTPLINK"代替
  3. 对于颜文字,将其统一转化成同一个单词

代码:

public class Tokenizer {
   
	
	// if change all text to lower case
	protected boolean toLowerCare = true;
	// if replace the user name and url with generic token
	protected boolean anonmymize = true;
	// if treat emoticons as tokens
	protected boolean emoticons = true;
	
	public ArrayList<String> tokenize(String text){
   
		if (toLowerCare)
			text = text.toLowerCase();
		if (anonmymize){
   
			text = text.replaceAll("http\\:\\/\\/[\\S]*\\b", "HTTPLINK");
			text = text.replaceAll("\\@\\w+", "@USER");
		}
		// deal with negation
		text = text.replaceAll("\\'", "");
        text = text.replaceAll("\\!\\!+", "!!");
        text = text.replaceAll("\\?\\?+", "??");
        text = text.replaceAll("\\bno\\s+", "no_");
        text = text.replaceAll("\\bnot\\s+", "not_");
        text = text.replaceAll("\\bdoesnt\\s+", "doesnt_");
        text = text.replaceAll("\\bdont\\s+", "dont_");
        text = text.replaceAll("\\baint\\s+", "aint_");
        
        // tokenizer
        Pattern p = null;
        
        if (emoticons)
        	p = Pattern.compile("([\\@\\#]?\\w[\\w'_]*)|([:;=x][-o^]?[)(/\\\\dp])|([/\\\\)(dp][-o^]?[:;=x])|([!?]+)");
        else
        	p = Pattern.compile("[\\@\\#]?\\w[\\w'_]*");
        Matcher matcher = p.matcher(text);
		
		
        ArrayList<String> tokens = new ArrayList<String>();
        String matchText = null;
        while(matcher == null || matcher.find()){
   
        	matchText = matcher.group();
        	if (matchText.length() == 0)
        		break;
        	tokens.add(matchText);
        }
		return tokens;
	}


	public boolean isToLowerCare() 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值