说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

【问底】严澜:数据挖掘入门——分词

HTML文档下载 WORD文档下载 PDF文档下载
随着社会化数据大量产生,硬件速度上升、成本降低,大数据技术的落地实现,数据这座金山已浮出水面。这里,严澜将带我们逐渐开启这座金山——从“分词”开始挖掘数据。

谷歌4亿英镑收购人工智能公司DeepMind,百度目前正推进“百度大脑”项目,腾讯、阿里等各大巨头也在积极布局深度学习。随着社会化数据大量产生,硬件速度上升、成本降低,大数据技术的落地实现,让冷冰冰的数据具有智慧逐渐成为新的热点。要从数据中发现有用的信息就要用到数据挖掘技术,不过买来的数据挖掘书籍一打开全是大量的数学公式,而课本知识早已还给老师了,着实难以下手、非常头大!

我们不妨先跳过数学公式,看看我们了解数据挖掘的目的——发现数据中价值。这个才是关键,如何发现数据中的价值。那什么是数据呢?比如大家要上网首先需要输入网址,打开网页后会自动判断哪些是图片、哪些是新闻、哪些是用户名称、游戏图标等。大脑可以存储大量的信息,包括文字、声音、视频、图片等,这些同样可以转换成数据存储在电脑。人的大脑可以根据输入自动进行判断,电脑可以通过输入判断吗?

答案是肯定的! 不过需要我们编写程序来判断每一种信息,就拿文字识别来说吧,怎么从一个人在社交网络的言论判断他今天的心情是高兴还是愤怒!比如:“你假如上午没给我吃冰淇淋,我绝对会不happy的。”  信息发布时间为下午2点。对于我们人类一看这个句子就知道他是吃过冰淇淋了,心情肯定不会是愤怒。那计算机怎么知道呢?       

这就是今天的主题,要让计算机理解句子的语义,必须要有个程序,上面的句子和发布时间是输入,输出就是 “高兴”。要得到“高兴”就要建立 “高兴”的规则,可以建一个感情色彩词库,比如高兴(识别词是高兴、happy),愤怒(识别词是愤怒、生气)。这里的识别词就是输入中出现的词语,比如上面的句子中的“happy”就识别出了“高兴”这个感情色彩词。但是光识别出“happy”肯定是不行的,前面的“假如……没……,我……不……”等关键词都需要识别出来,才能完整判断一个句子的意思。为了达到这个效果,就必须要用分词技术了。

分词

我们先人工对上面的句子来进行一下切词,使用斜线分割:“你/假如/上午/没/给/我/吃/冰淇淋/,/我/绝对/会/不/happy/的/。/”。但是程序如何做到自动切分?这个其实中国的前辈们已经做了很多中文分词的研究,常见的分词算法有:

1. 基于词典的分词,需要先预设一个分词词典,比如上面句子切分出来的“假如、上午”这些词先存放在词典,然后把句子切分成单字组合成词语去词典里查找,匹配上了就挑选出来一个词。没有匹配上的就切分成单字。

2. 基于统计的分词,需要先获取大量的文本语料库(比如新闻、微博等),然后统计文本里相邻的字同时出现的次数,次数越多就越可能构成一个词。当达到一定次数时就构成了一个词,即可形成语料概率库。再对上面句子进行单字切分,把字与字结合后在语料概率库里查找对应的概率,如果概率大于一定值就挑选出来形成一个词。这个是大概描述,实际生产环境中还需要对句子的上下文进行结合才能更准确的分词。

3. 基于语义的分词,简而言之就是模拟人类对句子的理解来进行分词。需要先整理出中文语句的句法、语义信息作为知识库,然后结合句子的上下文,对句子进行单字切分后组合成词逐个带入知识库进行识别,识别出来就挑选出一个词。目前还没有特别成熟的基于语义的分词系统。

基于词典的分词

为了让大家快速的了解分词技术,我们采用第一个方式来做测试:基于词典的分词,这种方式简单暴力可以解决百分之七八十的问题。基于词典的分词大概分为以下几种方式:

1. 正向最大匹配,沿着我们看到的句子逐字拆分后组合成词语到词典里去匹配,直到匹配不到词语为止。举个实际的例子:“人民大会堂真雄伟”,我们先拆分为单字“人”去词典里去查找,发现有“人”这个词,继续组合句子里的单字组合“人民”去词典里查找,发现有“人民”这个词,以此类推发现到“人民大会堂”,然后会结合“人民大会堂真”去词典里查找没有找到这个词,第一个词“人民大会堂”查找结束。最终分词的结果为:“人民大会堂/真/雄伟”。如下图演示了用正向最大匹配算法识别人民大会堂的过程,“真”,“雄伟”的识别类似。

2. 逆向最大匹配,这个和上面相反,就是倒着推理。比如“沿海南方向”,我们按正向最大匹配来做就会切分成 “沿海/南方/向”,这样就明显不对。采用逆向最大匹配法则来解决这个问题,从句子的最后取得“方向”这两个字查找词典找到“方向”这个词。再加上“南方向”组成三字组合查找词典没有这个词,查找结束,找到“方向”这个词。以此类推,最终分出“沿/海南/方向”。

3. 双向最大匹配,顾名思义就是结合正向最大匹配和逆向最大匹配,最终取其中合理的结果。最早由哈工大王晓龙博士理论化的取最小切分词数,比如“我在中华人民共和国家的院子里看书”,正向最大匹配切分出来为“我/在/中华人民共和国/家/的/院子/里/看书”工8个词语,逆向最大匹配切分出来为“我/在/中华/人民/共/和/国家/的/院子/里/看书”共11个词语。取正向最大匹配切出来的结果就是正确的。但是如果把上面那个例子“沿海南方向”双向切分,都是3个词语,改如何选择?看第4个《最佳匹配法则》。

4. 最佳匹配法则,先准备一堆文本语料库、一个词库,统计词库里的每一个词在语料库里出现的次数记录下来。最后按照词频高的优先选出,比如“沿海南方向”,正向切分为:“沿海/南方/向”,逆向切分为:“沿/海南/方向”。其中“海南”的频度最高,优先取出来。剩下“沿”、“方向”也就正常切分了。是不是这就是基于词典分词的最佳方案?比如数学之美中提到的:“把手抬起来” 和 “这扇门的把手”,可以分为“把”、“手”、“把手”,不管怎么分总有一句话的意思不对。后续再介绍如何通过统计的分词处理这些问题。

说了这么多,我们来实战一下如何基于词典的分词:

public class TestPositiveMatch {    public static void main(String[] args) {   String str = "我爱这个中华人民共和国大家庭";   List<String> normalDict = new ArrayList<String>();   normalDict.add("");   normalDict.add("爱");  normalDict.add("中华");  //测试词库里有中华和中华人民共和国,按照最大匹配应该匹配出中华人民共和国   normalDict.add("中华人民共和国");  int strLen = str.length();  //传入字符串的长度   int j = 0;  String matchWord = ""; //根据词库里识别出来的词  int matchPos = 0; //根据词库里识别出来词后当前句子中的位置  while (j < strLen) {  //从0字符匹配到字符串结束  int matchPosTmp = 0;  //截取字符串的位置   int i = 1;  while (matchPosTmp < strLen) {  //从当前位置直到整句结束,匹配最大长度   matchPosTmp = i + j;  String keyTmp = str.substring(j, matchPosTmp);//切出最大字符串  if (normalDict.contains(keyTmp)) { //判断当前字符串是否在词典中  matchWord = keyTmp;  //如果在词典中匹配上了就赋值  matchPos = matchPosTmp; //同时保存好匹配位置   }   i++;   }   if (!matchWord.isEmpty()) {  //有匹配结果就输出最大长度匹配字符串   j = matchPos;  //保存位置,下次从当前位置继续往后截取   System.out.print(matchWord + " ");   } else {  //从当前词开始往后都没有能够匹配上的词,则按照单字切分的原则切分   System.out.print(str.substring(j, ++j) + " ");   }   matchWord = "";   }   } }

输出结果为:我爱这个中华人民共和国大家庭  

按照这样我们一个基本的分词程序开发完成。

对于文章一开始提到的问题还没解决,如何让程序识别文本中的感情色彩。现在我们先要构建一个感情色彩词库“高兴”,修饰词库“没”、"不”。再完善一下我们的程序:

public class TestSentimentPositiveMatch {   public static void main(String[] args) {   String str = "你假如上午没给我吃冰淇淋,我绝对会不happy的。";  //语义映射   Map<String, String> sentimentMap = new HashMap<String, String>();   sentimentMap.put("happy", "高兴");  //情感词库   List<String> sentimentDict = new ArrayList<String>();   sentimentDict.add("happy");  //修饰词   List<String> decorativeDict = new ArrayList<String>();   decorativeDict.add("不");   decorativeDict.add("没");  //修饰词衡量分数   Map<String, Double> decorativeScoreMap = new HashMap<String, Double>();   decorativeScoreMap.put("不", -0.5);   decorativeScoreMap.put("没", -0.5);  List<String> decorativeWordList = new ArrayList<String>();  //修饰词  String sentimentResult = ""; //情感结果  int strLen = str.length();  //传入字符串的长度   int j = 0;  String matchSentimentWord = ""; //根据词库里识别出来的情感词  String matchDecorativeWord = ""; //根据词库里识别出来的修饰词  int matchPos = 0; //根据词库里识别出来词后当前句子中的位置  while (j < strLen) {  //从0字符匹配到字符串结束  int matchPosTmp = 0;  //截取字符串的位置   int i = 1;  while (matchPosTmp < strLen) {  //从当前位置直到整句结束,匹配最大长度   matchPosTmp = i + j;  String keyTmp = str.substring(j, matchPosTmp);//切出最大字符串  if (sentimentDict.contains(keyTmp)) { //判断当前字符串是否在词典中  matchSentimentWord = keyTmp;  //如果在词典中匹配上了就赋值  matchPos = matchPosTmp; //同时保存好匹配位置   }  if (decorativeDict.contains(keyTmp)) { //判断当前字符串是否在词典中  matchDecorativeWord = keyTmp;  //如果在词典中匹配上了就赋值  matchPos = matchPosTmp; //同时保存好匹配位置   }   i++;   }   if (!matchSentimentWord.isEmpty()) {  //有匹配结果就输出最大长度匹配字符串   j = matchPos;  //保存位置,下次从当前位置继续往后截取   System.out.print(matchSentimentWord + " ");   sentimentResult = sentimentMap.get(matchSentimentWord);   }   if (!matchDecorativeWord.isEmpty()) {  //有匹配结果就输出最大长度匹配字符串   j = matchPos;  //保存位置,下次从当前位置继续往后截取   System.out.print(matchDecorativeWord + " ");   decorativeWordList.add(matchDecorativeWord);   } else {  //从当前词开始往后都没有能够匹配上的词,则按照单字切分的原则切分   System.out.print(str.substring(j, ++j) + " ");   }   matchSentimentWord = "";   matchDecorativeWord = "";   }   double totalScore = 1;   for (String decorativeWord : decorativeWordList) {   Double scoreTmp = decorativeScoreMap.get(decorativeWord);   totalScore *= scoreTmp;   }   System.out.print("\r\n");   if (totalScore > 0) {   System.out.println("当前心情是:" + sentimentResult);   } else {   System.out.println("当前心情是:不" + sentimentResult);   }   } }

通过传入“你假如上午没给我吃冰淇淋,我绝对会不happy的。”,结果输出为:“当前心情是:高兴”。当然你也可以改变其中的修饰词,比如改为:“你假如上午没给我吃冰淇淋,我绝对会happy的。”,结果输出为:“当前心情是:不高兴”。

机器再也不是冷冰冰的,看起来他能读懂你的意思了。不过这只是一个开始,抛出几个问题:

  1. 如何让程序识别句子中的时间?比如“上午”、“下午2点”。
  2. 如何处理“把手抬起来” 和 “这扇门的把手”中的“把”与“手”的问题?
  3. 如何构建海量的知识库,让程序从“婴儿”变成“成年人”?
  4. 如何使用有限的存储空间存储海量的知识库?
  5. 如何提高程序在海量知识库中查找定位信息的效率?
  6. 如何识别新词、人名、新鲜事物等未知领域?

宇宙芸芸众生都是相通的,大脑也许就是一个小宇宙,在这个小宇宙又有很多星球、住着很多生物。而电脑也是宇宙中地球上的一个产物,只要存储计算速度发展到足够强大一定可以构建成一个强大的大脑。

你看这个单词 "testaword" 认识吗?可能不认识,因为我们五官先获取到的信息,然后根据大脑以往学习的经验做出判断。但是你看这个短语 " test a word" 认识吗?再看看开始那个单词“testaword”是不是就亲切多了?   

To Be Continued……

关于作者:严澜现成都创行负责人,历任上海创行科技技术总监。曾任中国平安平台开发工程师,腾讯拍拍网B2C架构工程师。Web3.0语义搜索引擎探索者,海量数据处理,互联网高性能低成本平台架构搭建实践者,构建让更多普通开发者快速掌握高性能技术的框架,自由机器人研发爱好者。

更多《问底》内容

  • 【问底】严澜:数据挖掘入门——分词

《问底》CSDN云计算频道新建栏目,以实践为本,分享新时代软件架构与研发。在含有“【问底】”字样标题的文章中,你可能会看到某个国外IT巨头的架构分享,也可能会看到国内资深工程师对某个技术的实践总结,更可能会看到一系列关于某个新技术的探索。但是在含有“【问底】”字样标题的文章中,你绝对不会看到对任何一个产品的宣传,以及一些带有目的性的趋势探讨。

同时,为了更好地进行技术与实践分享,《问底》邀请对技术具有独特/深刻见解的你一起打造一片只属于技术的天空,详情可邮件至zhonghao@csdn.net。


免费订阅“CSDN云计算(左)CSDN大数据(右)”微信公众号,实时掌握第一手云中消息,了解最新的大数据进展!

CSDN发布虚拟化、Docker、OpenStack、CloudStack、数据中心等相关云计算资讯,     分享Hadoop、Spark、NoSQL/NewSQL、HBase、Impala、内存计算、流计算、机器学习和智能算法等相关大数据观点,提供云计算和大数据技术、平台、实践和产业信息等服务。                

【OSTC讲师专访】腾讯追风(QcloudMna):开源移动加速SDK Google Go:一门为云而生的编程语言 3月26日:没有Larry Page,就没有今天的Google Hortonworks再获1亿美元融资,Hadoop领域三足鼎立 Intel收购Basis Science,欲拓展可穿戴设备市场 Facebook以20亿美元收购Oculus:虚拟现实将是未来计算平台又一大事件 基于NodeJS的14款Web框架 Hadoop导航:版本、生态圈及MapReduce模型 把黑匣子送上“云” 失联困境能否不再 看看全球十大电信巨头的大数据玩法 尹绪森:打开圈子拥抱变化,谈Spark玩家的自我修养 从Healthbook看苹果将如何颠覆移动医疗和健身追踪 Google可穿戴:详解Android Wear的十大功能 初创企业非技术人员的迷思 【OSTC讲师专访】王兴博:Genesis-3D,3D开源游戏引擎 Facebook发布开源项目Tweaks,让iOS应用开发更加便捷 移动开发创业团队再下一城!UCloud与飞流战略合作 【走进支付宝】即将开场,问题大征集! 开发者薪资调查:半数开发者工作十年方可迎来好“薪”情 沟通更畅快 HipChat推出1对1视频和屏幕共享功能 AMD宣布支持DirectX 12 为游戏开发者带来更多福利 开发者薪资调查:2013年哪种编程语言最赚钱? 苹果挖墙脚未果,黑莓高管跳槽被起诉 不看不知道:六个超大规模Hadoop部署案例 豌豆荚发布应用内搜索技术协议 兼容App Indexing Oculus 21岁鬼才创始人:收购不等于改变 Unite China 2014课程解析:Unity教育行业专场免费开放 Instagram技术窥探,助你打造响应式App 切勿妄谈Hadoop,以及4个数据管道打造实践 一周消息树:雨果&#183;巴拉与小米的那些事儿 《近匠》轻邮联合创始人Wesley:移动App要有撼动企业服务的野心 我是一个dephi初学者,请问dephi要从什么学起 谁有将彩色的*.BMP转成黑白的*.BMP的源程序?发我邮箱好吗?非常感谢! 在DBGridEh表格控件中怎样使选中的栅格字体变成红色。 急寻C/C++的开发包(窗口,按钮,鼠标,图形) 通过MCSE的各位老师,各位大侠请进!! 817NtEE的安装问题!(急) 上午听专家上课,他说:"深圳科陆(做电力系统的)的技术不错",是这样吗? 为什么getsystemtime得到的系统时间的小时数中比当前小时数小8?为什么?为什么?为什么?为什么?为什么?为什么?为什么? 如何实现页面一打开就下载一个文件? 在delphi中用ShellExecute调用oracle的imp/exp/sql loader这些命令的语句应该怎样写? 在三层开发过程中,如果客户端是win95,则需要安装WinSocket2.0,问题是在程序中怎样判断客户端是否安装了WinSocket2.0版本? 谁有好用的http代理给一个? 请教浙大1038题 关于 SSI SHTML 方面的问题 好久不来了,今儿高兴,散分。(前十位) ADO的数据库连接问题 谁做过dbf文件转文本文件的程序 哪有介绍delphix的文章下载啊,我的英语水平实在不怎么样,那个help看不懂啊! 偶得一SDK电子书,不敢私有,与大家共享,与想了解SDK的朋友共享。 安装Red hat linux 7.3时遇到以下问题,请指教... 如何向另一个进程发送键盘消息或者给进程发送菜单命令? 高分之下,必有勇夫! 关于包的问题(什么情况下才能访问同一目录下另一文件的类?) 字体的大小问题! (三层结构)我按照李维书上所说的,为什么客户端老是连不上应用程序服务器端? 初学Delphi,请各位大虾帮助!高分送上 关于定位打印的问题!!! 怎么写分组发新闻的jsp程序 关于界面设计的问题... 我想自己写个Mp3播放器,结果遇到不少问题。请大家帮忙 WIN2000关机巨慢,原因是什么? 关于字符串比较大小?下面代码有错么????????????? c++调试问题? #include <string> 后编译不过去。请帮忙看看 请教各位:关于TButton->ModalResult 在NS浏览器中如何对text等这样的对象进行事件的处理? sql2000里如何得到当前记录号??/ ----------- iis或win2000server中如何设置文件夹大小??? 大家有没有做过医疗社区管理软件的?最好有成熟的源代码。 介绍一款好的主板,搭配p41.7G。 我升级了我的VB6程序,有个问题解决不了,来看看 做一个Java程序。将光盘上的某个目录拷到C盘上 清教一个计算机系统结构的计算题,题目见内容 关于文件读入的问题!谢谢各位! 数据统计分析问题,请专家关注!好难 如何判断执行 INSERT INTO 语句插入记录成功或失败? 哪位大侠能给我详细的介绍一下CWnd::SendMessage()函数 Strange return value of CoInitializeEx [HELP]辞职问题:杭州的GGJJ们来帮帮我 谁有windows 95的下载地址? ADO与本地数据库问题,看来是高难问题啊,怎么没人接招呢? .关于荷花的作文有哪些 小池和晓出净慈寺送林子方中写出第一首诗中表现自然景物之间亲密接触融洽关系的词语 小池200字想象作文(第一句到第二句) 求一部优秀的影视作品的观后感和一本好书的读后感字数要600字左右. 本人烤鸭一枚,马上就要雅思了,写了一篇大作文,希望有能力的大神给评个分, 《小池》与《晓出净慈寺送林子方》都描写了荷花,但写法各有不同,请指出它们的不同之处.是写法上的不同 小学六年级女生在上课时眼睛看不清黑板必须戴眼镜吗? 雅思大作文跑题了,烤鸭帮我看看能得几分?问的是越来越多不用文化背景的人和少数民族在一个国家的原因,还有对国家的消极和积极发展.但是我没看懂ethnic 这个单词我先写了一些原因为什 小池和晓出净慈寺送林子方两首诗都写了荷花,但写法上各有不同,请指出 上课看不清黑板,想买个望远镜,什么规格的比较好啊? 请雅思大神帮我看看我写的这篇英语作文我感觉自己存在很多问题,请大神帮我看看,我的语法有没有问题,自己写的从句有没有问题,词汇用法有错误么.该删去些什么该添加什么.还有我的段落 小池与晓出净慈寺送林子方的问题1 小池中表现自然景物之间融洽关系的词语有______、_____、_____.2 两诗都有荷花,但写法不同,指出来_______________ 用排比句介绍百草园的快乐生活仿照例句:朋友,百草园真是我童年的“乐园”呀!春天,你看那五彩缤纷、生机勃勃的草长莺飞.请仿句! 关于读书做人的文章 在黑板上写出1,2...,1993,只要黑板上还有2个或2个以上的数,就擦去其中的任意两个数并写上(a-b)问最后黑板上剩下的数是奇数还是偶数? 描写风大的句子(不要诗) 如何读书做人的文章 四年级鸟的天堂导游词 有关花,草,树,的古诗名句要作者和朝代 讲述如何读书做人的文章 《将相和》中,赵王是个什么样的人,为什么? 我最欣赏的影视作品观后感怎么写我是中学生 古今中外讲述如何读书做人的文章 小学人教版四年级上册第三课鸟的天堂写一段导游词 谢谢 带有花朵名字的古诗? 荷花 为什么说这幅画是活的 《将相和》中赵王是个怎样的人?为什么? 你的眼睛如果近视,摘下眼镜,黑板上的字就看不清了.若用手指按住眼角,稍用力,拉紧眼皮,就能清楚的看到黑板上的字了.分析其中的道理是什么 小学三年级课文荷花 的生字有哪些啊谢谢 《将相和》赵王是个怎样的人先“赵王是个——的人,因为他————————. 现在的小学生近视的人数是越来越多了,如果不配眼镜,上课就看不清黑板,很麻烦.未来的教室作文,要不要写其他方面的 《 封神演义 》是我国古代成就最高的神话小说.作者是 我发现的作文怎么写 3米看黑板上的字很吃力眼镜会是多少度? 神话故事封神榜的请教不知道剧情安排比干被挖心后遇见卖菜婆后因为老婆婆的回答后死了到底寓意着什么?是当时人们的一种什么意思?这个故事在最初的时候到底反映着什么样的精神内涵 小池的作者是什么代的? 请从内容和结构两方面说说画线句子的作用画线句子:傍晚时候,上灯了,一点点黄晕的光,烘托出一片安静而和平的夜.在乡下,小路上,石桥边,有撑着伞慢慢走着的人,地里还有工作的农民,披着 三年级下册的多音字1 小池的作者是谁 一个诗人描写另一个诗人的诗句,要作者、朝代、诗名.越多越好,这号我不要了财富悬赏100 七年级下册20课的多音字 小池全诗 帮忙看看我的雅思小作文能得几分啊,剑5 Test2 Task 1Illustrated are two column graphs,showing the two reasons for learning among students of five age groups (under 26-over 49) and the support situation by employers.It shows a moderately 英语翻译 写我的作文开头结尾,开头和结尾要一篇文章的 帮忙看看这篇雅思小作文 有什么问题能拿几分剑桥4 test 2 task1The statistical data listed shows how people’s choice oftransportation varied in England in 1985 and 2000.The most dominant mode of travel in both years was by car, th 英语翻译 收集好的短文,随笔,作文,或者好的文章开头结尾.文章500字左右 歌颂 青年 青春 创业 主题的小短文(诗歌,散文,四五十字的)用于展示青年创业风采的导语,有关怀篇,成长篇,交流篇,成果篇等等 英语翻译Friendship is a very important human relationship and everyone needs good friends.Good friendship has many benefits.It offers companionship,improves self-worth and promotes good health.There are times in our lives such as when we have rec 鲁迅的《雪》中,“就是这样”体现出怎样的语气 五年级下册语文5--8课的多音字迅速我要等不及了! 英语翻译Asia stocks and oil fell for a second after U.S,job growth stalled last month and amid concerned Europe's sovereign crisis will worsen.The Dollar Index headed for longest winning streaks in eight month. 父亲的难题阅读答案,就一题!导致父亲遇到难题的根本原因是( ),父亲的难题是( ) 五年级下册第九课多音字 色快 请问对生命的理解或感悟的作文怎么写?400字左右就行. 父亲的难题 就一题!父亲的难题①小保罗是个三年级的小学生.他父亲虽然空闲时间不多,但晚上却经常同他的孩子在一起.父亲喜欢孩子,总是津津乐道、不厌其烦地给他们讲些富有教益的寓言 荷花先写你喜爱的理由,颜色形状必要啊,(先写生长过程或者是时间顺序),再总结品格,托物言志 小池和晓出净慈寺送林子方有什么不同1 镜子和照片哪个才是真实的自己
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘