Coder Social home page Coder Social logo

hankcs / hanlp Goto Github PK

View Code? Open in Web Editor NEW
32.4K 1.1K 9.5K 71.16 MB

中文分词 词性标注 命名实体识别 依存句法分析 成分句法分析 语义依存分析 语义角色标注 指代消解 风格转换 语义相似度 新词发现 关键词短语提取 自动摘要 文本分类聚类 拼音简繁转换 自然语言处理

Home Page: https://hanlp.hankcs.com/

License: Apache License 2.0

Python 79.50% Java 1.44% Jupyter Notebook 19.06%
nlp natural-language-processing hanlp pos-tagging dependency-parser text-classification named-entity-recognition semantic-parsing

hanlp's People

Contributors

allen615 avatar anylisten avatar arthurtalkgoal avatar doubleblinddoubleblinddoubleblind avatar duohappy avatar fnaith avatar frank1998sj avatar furaoing avatar hailiang-wang avatar hankcs avatar hanlpbot avatar housemecn avatar jimichan avatar jsksxs360 avatar linuxsong avatar realforce1024 avatar sothic avatar starkingpku avatar thihy avatar thomasperkins1123 avatar tiandiweizun avatar tony-wang avatar tylunasli avatar victorzhrn avatar websue avatar xu2333 avatar xxjwxc avatar yangliatgithub avatar yzhangcs avatar ziq211 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hanlp's Issues

机构名识别导致的切词错误

按照要求,城镇居民医保和新农合政策范围内住院费用支付比例分别达到70%以上和75%左右。适当提高城镇居民医保和新农合门诊统筹待遇水平。 国务院医改办政策组负责人傅卫在接受记者采访时表示,从深化医改以来,基本医疗保障制度建设加快推进,医保保障水平也在不断提高,各级政府对城镇居民医保和新农合的补助标准从2008年的人均80元提高到了2013年的280元。到2015年,城镇居民医保和新农合政府补助标准将提高到每人每年360元以上。 不过,也有专家担心,随着保障水平提升,不断增加的医保基金支出正对医保基金“收支平衡、略有结余”的运行原则形成压力,甚至在一些地区造成超支风险。 记者了解到,国务院此前发文要求,在今年6月底前各省要全面启动城乡居民大病保险试点工作。大病医保的资金来源于现有医保基金的结余,即从城镇居民医保基金、新农合基金中划出,采取向商业保险机构购买保险的方式,不再额外增加群众个人缴费负担。 财经评论员余丰慧认为,如果提高大病保险保障水平,扩大报销种类,提高报销比例,而只在医保基金结余的存量上要资金来源,很快将造成两个方面的问题:一是可能影响到医保的资金支付,二是结余资金远远不够。 对此,《任务》要求,推进城乡居民基本医保制度整合和完善筹资机制。完善政府、单位和个人合理分担的基本医保筹资机制。此外,研究建立稳定可持续、动态调整的筹资机制,在逐步提高整体筹资标准的同时,按照积极稳妥、逐步到位的原则,逐步提高个人缴费占整体筹资的比重。 而根据此前相关要求,城镇居民医疗保险个人缴费应随总筹资水平作相应调整,个人缴费应占人均总筹资20%左右。对此,**财经大学教授褚福灵在接受记者采访时表示,目前各地正研究建立城镇居民医疗保险财政补助和个人缴费科学合理、协同增长的机制,强化个人缴费义务。 惠民回购大型医疗设备降低检查费 《任务》指出,降低药品和高值医用耗材价格,降低大型医用设备检查、治疗价格,已贷款或集资购买的大型设备原则上由政府回购,回购有困难的限期降低价格。价格调整政策要与医保支付政策相衔接。 “老百姓抱怨看病贵的问题能够真正缓解了。”一位不愿透露姓名的业内人士指出,多年来患者抱怨看病贵,主要集中在诊疗费用上包括大型设备的检查费用等方面。政府也让医院降价,当大型设备的成本、维修费用都摆在那里,成本必然分摊到患者的检查费用中。 记者5月28日致电卫计委新闻宣传司副司长宋树立了解具体的回购政策,但截至记者发稿前,电话一直无法接通。 记者从食药总局主办的医疗器械质量万里行活动中了解到,国内大约近70%的大型医疗设备从销售到售后服务均被GE、西门子、飞利浦等跨国公司垄断。这体现在技术和耗材上的垄断直接导致市场竞争不充分,价格虚高。为了追求更高的利润,生产厂家从提供维修的配件中赚取高额差价成为主要盈利手段,售后服务提供商实际上变成了医疗设备配件销售商。 据对山东菏泽一家医院的调查,目前医疗设备厂家售后保质期一般都是一年,之后的维修有全保、技术保和单次维修3种情况。厂家对几种设备的维修报价如下:美国产64排VCT,一年全保38万元,一年技术保15万元,单次人工费3.1万元;美国产单排CT一年全保30万元,一年技术保13.6万元,单次人工费1.1万元……由于目前国家没有一个大致统一的定价标准,基本上由医院和厂家谈判,最后还是厂家说了算。 “不少进口的大型医疗设备维修费用占产品本身费用的三分之一或二分之一,甚至有的已经超过了产品价格。因此,卫生局让医院降低检查费用价格,根本就不可能,而用回购这一手段解决了诊疗费用高的问题。”上述人士指出。 鼓励实现跨省联合招标降低药价 “尽管跨省招标在政府采购中并不是一个新鲜事,但这是药品行业第一次提出。”**医药企业管理协会副会长牛正乾28日表示,跨省联合招标可能推进招标环节的公开、透明。 《任务》在“加快推行公立医院改革”中指出,鼓励跨省联合招标采购保证药品质量安全,切实降低药品价格,有条件的地区要建立与基层基本药物采购联动的机制。逐步规范集中采购药品的剂型、规格和包装。推进高值医用耗材公开透明、公平竞争网上阳光采购。药品和高值医用耗材采购数据实行部门和区域共享。 中投顾问医药行业研究员许玲妮指出,县级医院联合招标能够降低药品配送费用,这部分差价分摊到药品上有利于降低药品价格,而且有利于平衡招标药品的质量和价格,改变以往备受业界诟病“唯低价是取”的招标规则。 不少医药企业的董事长都向记者表示,现行以省为单位的药品集中招标采购制度存在不少弊端,劳民伤财,应该进行改革。 许玲妮指出,药品招标采购规则存在漏洞,缺乏由政府部门提供必要的、较全面的药品信息。二是药品集中招标采购监督管理难以到位,招标后没有规范的信息反馈程序,监管部门无法对招标人合同履行情况进行有效监管,使集中招标采购活动“先热后凉,流于形式”。 “招投标本来是国际上通行的一种比较好的市场化采购方式,但目前我国政府包办的药品招标政策严重异化,成为药品进入市场所执行的二次行政管制。”葵花药业集团董事长关彦斌指出,现行药品招投标的实质是把药品进入医疗机构使用的正常市场行为变成了行政审批,并且同种产品不同区域年年审批,招标主管部门成了药品领域的最大审批权机构。 不过,许玲妮也指出,药品跨省联合招标采购是否可行与各省的区位有关,因为药企要承担运输成本,如果到两省距离不一样,承担的运费成本明显不同,如果按照统一招标并不合理。“比如北京、天津这两个直辖市,辖区较小,药企统一配送承担的费用差不多的情况下,跨省联合招标采购是可行的。”

启用机构名识别后,切词结果会把 "葵花 当做机构名

请问该如何切分*/

输入 鱼300g*2/组

使用 HanLP.newSegment()
切分结果 [鱼/n, 300g*2//nx, 组/n]

使用 AhoCorasickSegment().enablePartOfSpeechTagging(true)
切分结果 [鱼/nz, 300g*2//nx, 组/nz]

使用 NShortSegment()
切分结果 [鱼/n, 300g*2//nx, 组/n]

都是 [鱼, 300g*2/, 组]

请问该如何配置才能切出
[鱼, 300g, * ,2, / , 组] or [鱼, 300 , g, *,2 , / , 组] ?

/////////////////////
补上 鱼300克*2/组的情形

[鱼/n, 300/m, 克/q, *2//nx, 组/n]
仍有 *2/ 切为一个词的情况发生

分词bug

对一片文本进行分词,发现会抛IllegalArgumentException异常,每次必现。不知道是什么原因,能解释一下吗?是我使用的方法不对吗?我跑了几千篇文章都没问题,只有这篇文章有问题。

测试文本:
  昨日,陈燕和导盲犬到达雍和宫站准备换乘2号线。根据当天起实施的新规,导盲犬被允许乘坐地铁和火车。新京报记者 王贵彬 摄
  
  地铁内一位小女孩见到导盲犬有些害怕,陈燕表示导盲犬很安全,“就是踩到它的脚,它也不会咬你。”新京报记者 王贵彬 摄
  
  昨日,地铁西直门站,流动巡查的北京市轨道交通执法大队执法人员,胸前佩戴执法记录仪。
  实习生 彭子洋 摄
  轨道交通执法队执法首日未开罚单
  《北京市轨道交通运营安全条例》实施,初期对乞讨卖艺以劝导为主;被拒11次导盲犬终乘地铁
  新京报讯 实施首日,北京首支轨道交通执法队也于当天开始进地铁执法,当天并未开出罚单。交通执法部门相关负责人表示,法规实施前期以劝导为主。
  最终目标:站均两名执法人员
  根据《条例》规定,在地铁里乞讨、卖艺将被处以50元以上1000元以下罚款。在车站、车厢内派发广告等物品的,面临最高1万元的罚款。作为依照法规执法的北京市轨道交通执法大队昨天首次进地铁工作,当天上午,记者在西直门等地铁车站看到,在闸机处和换乘通道内,身着交通执法制服的执法人员两人一组流动巡查。
  执法队相关负责人告诉记者,目前流动巡查对于发现违规的人员,可能首先进行劝导询问,一开始不会进行处罚。若出现严重情节,如不停止违法违规行为的,会采取强制措施以及处罚,“执法人员都要进行现场取证”。
  据统计,轨道交通执法大队正式上岗的第一天,大队全员上岗,在兼顾地铁全线网的情况下,重点对1号线、2号线、4号线、5号线、10号线的70个重点车站进行监管,巡视车站97座,劝阻在地铁站内玩轮滑行为3起;劝阻摆摊小商贩4起;劝阻散发小广告1起;劝阻翻越闸机2起。
  交通执法总队副总队长梁建伟介绍,轨道交通执法大队现正式编制共有88人,按照地铁运营公司管理范围分为5个中队,和一个专门负责应对重点车站重点时段或大客流冲击时安全保障的机动中队。
  “我们的最终目标是318个站,平均每站两名执法人员”,梁建伟说,执法大队后续还会招聘人员辅助执法,同时借助地铁运营方为执法提供保障。
  滑板车等或将禁入地铁
  梁建伟介绍,执法队员职责包括对危害轨道交通设备设施安全的行为、危害轨道交通运营安全的行为及轨道交通相关单位不落实安全生产主体责任的行为实施行政处罚,其中有41项行政处罚,5项行政强制。
  “法规实施前期,我们还是以劝阻为主。”梁建伟说,条例对在车站、车厢内乞讨卖艺、派发广告以及其他危害地铁安全的行为都有了规定,但实施上有具体问题,还需要制定细则来进一步明确,目前细则正在研究中,将于1个月到2个月内出台。
  北京地铁运营公司相关负责人表示,《条例》中提到,在车站内禁止从事滑板、轮滑、自行车等运动。下一步,滑板、轮滑等运动器具可能禁止带入地铁。目前,有关禁带物品的目录相关部门还在进一步完善,之前允许带的大型工具等等,未来或列入违禁名单中。
  ■ 探访
  乘客:打击乞讨不能仅靠罚款
  昨日中午1时许,记者在地铁2号线宣武门站看到一位妇女拿着一个音箱,一边放音乐一边向乘客乞讨,一节车厢内,只有一位年轻的女乘客给了她1元钱。根据《北京市轨道交通运营安全条例》,对地铁乞讨卖艺等危害地铁运营安全的行为,轨道交通执法人员可实施行政处罚。
  记者随后拨打了地铁车厢内贴着的北京地铁监督电话96165。得知是举报乞讨卖艺行为后,接线员询问了线路、车站、列车运行方向、所在车厢以及乞讨人员行进的方向等信息,并表示会马上联系车站工作人员。
  “乞讨卖艺行为让人感到厌烦”,同车乘客谢女士表示,自己曾有过多次在地铁上睡着后被乞讨者吵醒的经历,但她同时认为对这些人员还是应以劝导为主。同车大多数乘客也认为,地铁中的乞讨行为一般都有组织,不处罚乞讨卖艺组织者,但靠罚款难以杜绝这样的行为。
  此外,大多数乘客对于散发小广告“深恶痛绝”,称该行为使地铁车厢内环境脏乱。京港地铁安全部门负责人介绍,他们工作人员对地铁内散发小广告的行为只能劝阻,而不能没收他们的小广告。5月1日以后,有了条例的支持,会在这方面加强管理。
  导盲犬珍妮终于“获准”乘地铁
  此前被拒11次;《条例》明确视力残障者可携带导盲犬进站乘车
  在经历了11次被拒绝以后,导盲犬珍妮昨天终于感受了一把北京地铁。此次《条例》明确,视力残障者可携带导盲犬进站乘车。
  昨天上午,地铁5号线天通苑站,视障人士陈燕牵着导盲犬珍妮,来到地铁天通苑站,车站工作人员检查了视力残障证件、导盲犬证件后,向陈燕发放了福利票。
  在工作人员引导下,陈燕和导盲犬顺利进站。站在带无障碍标志的候车门前,陈燕反复指一下标志,又拍一下珍妮的头,告诉它要记住这个位置。
  嘀嘀嘀,地铁门打开,珍妮小心翼翼地走进车厢,它引导陈燕找到车厢接口处的空位置后停住,等陈燕站定后,珍妮静静的趴在脚边。车厢里其他乘客对导盲犬乘车非常感兴趣,但并没有人引逗,珍妮也丝毫没有躁动行为。5号线换乘2号线也有工作人员引导,这次,陈燕找到一个座位坐下,珍妮依旧卧在她脚边。
  陈燕说,乘坐公共交通工具的能力,是导盲犬在训练时的必修课。珍妮昨天的表现很好,并没有对人群有恐惧感。她希望,通过这一次的实践,让更多人了解视力残障人士对公共出行的需求,了解导盲犬。目前全国“持证”的导盲犬也不过七八十只,北京市目前共有9只,市区有7只,郊区有2只。

代码如下:
StringBuffer article = new StringBuffer();
String line;
try(BufferedReader out = new BufferedReader(new FileReader("C:/Users/huan.wang/Desktop/corpus.txt"))) {
while((line = out.readLine()) != null) {
article.append(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
List words = HanLP.segment(article.toString());
for(Term w : words) {
System.out.println(w);
}

异常栈信息:
Exception in thread "main" java.lang.IllegalArgumentException: Illegal Capacity: -1
at java.util.ArrayList.(Unknown Source)
at com.hankcs.hanlp.seg.WordBasedGenerativeModelSegment.convert(WordBasedGenerativeModelSegment.java:241)
at com.hankcs.hanlp.seg.Viterbi.ViterbiSegment.segSentence(ViterbiSegment.java:114)
at com.hankcs.hanlp.seg.Segment.seg(Segment.java:384)
at com.hankcs.hanlp.tokenizer.StandardTokenizer.segment(StandardTokenizer.java:50)
at com.hankcs.hanlp.HanLP.segment(HanLP.java:371)

建议在分词时,将字典中的忽略大小写功能添加到分词中!

在实际的搜索当中,用户是不考虑输入的字母是大写还是小写的问题的.所以博主可以考虑在分词的时候也不考虑输入文本的大小写问题,直接能够匹配词库中的词.举例如下:
List termList = NLPTokenizer.segment("爱听4g");
System.out.println(termList);
==============分词结果====================
[爱/v, 听/v, 4g/nz]

List termList = NLPTokenizer.segment("爱听4G");
System.out.println(termList);
==============分词结果====================
[爱听4G/nz]

其实我想要的结果是: 无论输入的是 爱听4g 还是 爱听4G 都能分出来[爱听4g/nz]

ViterbiSegment对应短词语辨识问题

请问ViterbiSegment对应短词语辨识不佳,是不是跟训练语料是长文章有关?

例如 可乐、年货 这些词 会分成 [可 ,乐] ,[年 , 货]
在CoreNatureDictionary.txt 已经有出现 可乐、年货
但CoreNatureDictionary.ngram.txt 里没有
可乐@末##末
年货@末##末

这些有比较优雅的方式解决吗? 还是必须添加语料至CoreNatureDictionary.ngram.txt ?

句法分析的逻辑建议

比如针对专有名词/机构的标记逻辑
我经常在全聚汇吃饭
[我/rr, 经常/d, 在/p, 全聚/nr, 汇/v, 吃饭/vi, ,/w]

"我经常在大铜锅吃饭,",
[我/rr, 经常/d, 在/p, 大/a, 铜/n, 锅/n, 吃饭/vi, ,/w]

"我经常在大铜锅海鲜楼吃饭,"
[我/rr, 经常/d, 在/p, 大/a, 铜/n, 锅/n, 海鲜/nf, 楼/n, 吃饭/vi, ,/w]

出现的位置最近的 介词【】动词之间且至少有一个名词出现,能否将这些词形成专有名词

繁体中文识别人名

"「國際足球總會」(FIFA)主席布拉特(Sepp Blatter)5月29日連任成功."

将“任成功”识别为人名,感觉粗暴的将“任成功”加到nr.txt里似乎不妥,也许某些语境里真有人叫“任成功”,不知道有没有更好的处理办法。

BaseNode编译错误

发现BaseNode的walkToLoad方法有编译错误。
错误信息:

The method walkToLoad(ByteArray, BaseNode.ValueArray) in the type BaseNode is not applicable for the arguments (ByteArray, BaseNode.ValueArray)

能否提供主词典动态删除方法?

看了下原码,发现BinTrie有提供remove方法,所以自定义词典可以动态删除。
不过DoubleArrayTrie好像并没有提供删除方法,请问是为什么?是否是因为数据结构的问题?

建议能提供主词典动态删除方法,因为若是把hanLP拿来做生产环境solr的分词,服务不能停,
如果要修改词库的话,建议能有动态删除所有词库的方法。

谢谢!

我是觉得自定义词典优先级应该大于核心词典.

我是觉得自定义词典优先级应该大于核心词典, 或者说有一个选项可以设置优先级. 像一些行业的词汇, 通过人民日报这种通俗语料库是识别不出来的. 比如说: 宝马X5, 八荣八耻, 三严三实. 这些专用词语在分词时候是应当被提取出来的. 当然, 你要说可以修改核心词典, 但我认为修改核心词典又是过重的做法, 词典都不好管理. 还是希望有自定义词典优先级的设置.

运行TestSegment.java 测试类中的 testShortest、testNT方法 出现以下错误

版本为当前最新1.1.5
java.lang.ExceptionInInitializerError
at com.hankcs.hanlp.recognition.ns.PlaceRecognition.roleTag(PlaceRecognition.java:106)
at com.hankcs.hanlp.recognition.ns.PlaceRecognition.Recognition(PlaceRecognition.java:36)
at com.hankcs.hanlp.seg.Viterbi.ViterbiSegment.segSentence(ViterbiSegment.java:75)
at com.hankcs.hanlp.seg.Segment.seg(Segment.java:242)
at com.hankcs.test.seg.TestSegment.testShortest(TestSegment.java:71)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at junit.framework.TestCase.runTest(TestCase.java:168)
at junit.framework.TestCase.runBare(TestCase.java:134)
at junit.framework.TestResult$1.protect(TestResult.java:110)
at junit.framework.TestResult.runProtected(TestResult.java:128)
at junit.framework.TestResult.run(TestResult.java:113)
at junit.framework.TestCase.run(TestCase.java:124)
at junit.framework.TestSuite.runTest(TestSuite.java:232)
at junit.framework.TestSuite.run(TestSuite.java:227)
at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:131)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ArrayIndexOutOfBoundsException: -1
at com.hankcs.hanlp.collection.trie.DoubleArrayTrie.get(DoubleArrayTrie.java:1210)
at com.hankcs.hanlp.dictionary.CoreDictionary.get(CoreDictionary.java:183)
at com.hankcs.hanlp.dictionary.ns.PlaceDictionary.(PlaceDictionary.java:60)
... 23 more

"齐云山高纯山茶油"分词bug

偶然遇到这个广告词,目前的nlp分词结果是“齐云山高/ns, 纯/a, 山茶油/nf”
正确的应该是“齐云山 高纯 山茶油”

同时开启标准分词和索引分词的数量词识别,然后索引数量词时发生数组越界异常.

测试代码:
public class TestHanLP {
@test
public void test1(){
StandardTokenizer.SEGMENT.enableNumberQuantifierRecognize(true);
IndexTokenizer.SEGMENT.enableNumberQuantifierRecognize(true);
List termList = StandardTokenizer.segment("此帐号有欠费业务是什么");
termList = IndexTokenizer.segment("此帐号有欠费业务是什么");
termList = StandardTokenizer.segment("15307971214话费还有多少");
termList = IndexTokenizer.segment("15307971214话费还有多少");
System.out.println(termList);
}
}
在对"此帐号有欠费业务是什么"分词时很正常.
对""15307971214话费还有多少"分词时发生数组越界异常错误.

异常错误:

java.lang.ArrayIndexOutOfBoundsException: 19
at com.hankcs.hanlp.seg.common.WordNet.get(WordNet.java:214)
at com.hankcs.hanlp.seg.WordBasedGenerativeModelSegment.decorateResultForIndexMode(WordBasedGenerativeModelSegment.java:489)
at com.hankcs.hanlp.seg.Viterbi.ViterbiSegment.segSentence(ViterbiSegment.java:105)
at com.hankcs.hanlp.seg.Segment.seg(Segment.java:291)
at com.hankcs.hanlp.tokenizer.IndexTokenizer.segment(IndexTokenizer.java:33)
at com.xin.file.FileTest.test4(FileTest.java:93)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)

CRFSegment 如何忽略标点?

segment.seg(sentence); 如何配置才能忽略句子中的标点?发现这个方法会把标点和词的组合作为新词

请问如何用您的工具包实现新词发现功能呢?

您好,看了您的工具包的代码,感觉写的非常好,我非常佩服。可能本人水平差一些,不知道您的工具有没有实现新词发现功能,若实现了怎么用,或如何利用现有功能实现新词发现功能。

人名称提取不准确

1.发现Nature源码中有
/**
* 蒙古姓名
*/
nr2, 但是测试并没有正确标记。比如
人名称识别的例子中:
签约仪式前,秦光荣、阿布杜勒·哈尼德、阿卜杜热西提、仇和、穆拉帝力、斯琴格日乐、 娜仁高娃、乌兰托雅和宫本正太郎等一同会见了企业家阿卜杜勒·哈米德。
使用这个句子一些人名称提取错误,或标注错误。
不太理解算法,是否一定需要加入字典?

2.再比如:
"请收回李珅300元钱",
"请收回李绅300元钱",
"请收回李西300元钱",
"请收回李硒300元钱",

标记人名:李珅 李西 正确;李绅 李硒 错误。

这个人名称标记,不用模型文件吗?

关于分词器对空格的处理!

先举例:
代码:
StandardTokenizer.SEGMENT.enableNumberQuantifierRecognize(true);
List termList = StandardTokenizer.segment("4月30号 9点钟");
System.out.println(termList);
termList = StandardTokenizer.segment("4月30号9点钟");
System.out.println(termList);
termList = StandardTokenizer.segment("4月30日9点钟");
System.out.println(termList);
===========================结果====================================
[4月/mq, 30/m, 号null/nz, 9点/m, 钟/n]
[4月/mq, 30号9点/m, 钟/n]
[4月/mq, 30日/mq, 9点/m, 钟/n]

其实 我理想中的效果应该是:
[4月/mq, 30号/mq, 9点钟/mq]
[4月/mq, 30号/mq, 9点钟/mq]
[4月/mq, 30日/mq, 9点钟/mq]

请教博主,这个问题 该如何去解决呢?

CRF模型 地址

您好,我是nlp新手,想使用CRF分词,但缺少模型文件,之前提供的地址也已失效,能够重新分享下,谢谢!

关于jdk7中 使用TextRankKeyword提取关键词报Comparison method violates its general contract!异常

测试代码:
String src = "data/test.txt";
Scanner scanner = new Scanner(Paths.get(src),"gbk");
StringBuilder sb = new StringBuilder();
while(scanner.hasNextLine()){
sb.append(scanner.nextLine().trim());
}
// System.out.println(sb.toString());
scanner.close();
System.out.println(TextRankKeyword.getKeywordList(sb.toString(), 20));

错误代码:
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(Unknown Source)
at java.util.TimSort.mergeAt(Unknown Source)
at java.util.TimSort.mergeCollapse(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.TimSort.sort(Unknown Source)
at java.util.Arrays.sort(Unknown Source)
at java.util.Collections.sort(Unknown Source)
at com.hankcs.hanlp.summary.TextRankKeyword.getKeyword(TextRankKeyword.java:115)
at com.hankcs.hanlp.summary.TextRankKeyword.getKeywordList(TextRankKeyword.java:47)

经过网上搜索:
http://www.tuicool.com/articles/MZreyuv
http://blog.csdn.net/ghsau/article/details/42012365

发现是jdk7 中 Collections的排序算法已经发生变化,需要处理两个比较对象相等的情况.
由于TextRankKeyword中的比较对象是Float对象,所以我查了下Float的compare方法(Float是实现Comparable接口的).代码:
public static int compare(float f1, float f2) {
if (f1 < f2)
return -1; // Neither val is NaN, thisVal is smaller
if (f1 > f2)
return 1; // Neither val is NaN, thisVal is larger

    // Cannot use floatToRawIntBits because of possibility of NaNs.
    int thisBits    = Float.floatToIntBits(f1);
    int anotherBits = Float.floatToIntBits(f2);

    return (thisBits == anotherBits ?  0 : // Values are equal
            (thisBits < anotherBits ? -1 : // (-0.0, 0.0) or (!NaN, NaN)
             1));                          // (0.0, -0.0) or (NaN, !NaN)
}

所以我将博主的代码:
Collections.sort(entryList, new Comparator<Map.Entry<String, Float>>()
{
@OverRide
public int compare(Map.Entry<String, Float> o1, Map.Entry<String, Float> o2)
{
return (o1.getValue() - o2.getValue() > 0 ? -1 : 1);
}
});

改为了:
Collections.sort(entryList, new Comparator<Map.Entry<String, Float>>()
{
@OverRide
public int compare(Map.Entry<String, Float> o1, Map.Entry<String, Float> o2)
{
return Float.compare(o1.getValue(),o1.getValue());
}
});

这样就不报错了.

请博主参考哈. 建议最好代码中的所有Float参数的比较实现都采用这中方式.

提取关键词、短语

你好,HanLP提取新闻的关键词或短语的时候效果总不尽人意,通常提取出来的词不是特别能表达出新闻关键关注点,有啥好的解决方案吗?

crf problem

当采用data-for1.2.2中的crf训练数据进行分词时,出现错误,具体是
代码为:
CRFModel crfModel = CRFModel.loadTxt("E:\scalaworkspace\Eyas\data\model\segment\CRFSegmentModel.txt.bin");
System.out.println("locad finish");
错误为
Exception in thread "main" java.lang.NumberFormatException: For input string: "U 0 0 : ( �??z?_K????]S?况??{???�k??n??"

分词器对"三年"的分词结果不是很理想

测试代码:
List termList = StandardTokenizer.segment("三年");
System.out.println(termList);
termList = StandardTokenizer.segment("3年");
System.out.println(termList);
termList = StandardTokenizer.segment("三 年");
System.out.println(termList);
termList = StandardTokenizer.segment("三元");
System.out.println(termList);
termList = StandardTokenizer.segment("3元");
System.out.println(termList);
======================分词结果======================================
[三/m, 年/n]
[3年/m]
[三/m, /w, 年/q]
[三元/nz]
[3元/mq]

首先查看词库,找到关于年和元的相关信息:
年 D 219 B 61 C 42 L 20 K 12 E 8
年 B 105 D 57 A 11 X 1
年 q 2421 n 95 m 1
年 qt 14340

元 P 47 D 2 A 1
元 D 957 C 672 E 60 B 22 K 3 L 1
元 q 1536 tg 5 n 1

词库中对年的统计,明显量词的词频比较高,但是为什么分出来是名词呢.我的代码已经是最新的代码了.

对于中文数量词改如何切分?

这是我的切分例子:
未分词:十九元套餐包括什么
标准分词:[十/m, 九/b, 元/q, 套餐/n, 包括/v, 什么/ry]
智能分词:[十/m, 九/b, 元/q, 套餐/n, 包括/v, 什么/ry]
索引分词:[十/m, 九/b, 元/q, 套餐/n, 包括/v, 什么/ry]

理想效果:
[十九元/mq, 套餐/n, 包括/v, 什么/ry]

CRF分词模型的训练 和 CRF分词视标点为新词问题

CRF分词模型使用的是什么语料?以及-f, -c参数的选取。只能通过不断的测试,选取经过测试选取效果好的?

另,经使用1.2.2版的HanLP和data,测试CRF分词,测试数据如下:

"《夜晚的骰子》通过描述浅草的舞女在暗夜中扔骰子的情景,寄托了作者对庶民生活区的情感",
"这个像是真的[委屈]前面那个打扮太江户了,一点不上品...@hankcs", 

关闭词性标注的分词效果如下:

[《, 夜晚, 的, 骰子, 》, 通过, 描述, 浅草, 的, 舞女, 在, 暗夜, 中, 扔, 骰子, 的, 情景, ,, 寄托, 了, 作者, 对, 庶民, 生活区, 的, 情感]
[这个, 像, 是, 真的, [, 委屈, ], 前面, 那个, 打扮, 太, 江户, 了, ,, 一点, 不, 上品, ., ., ., @, hankcs]

再查阅词典CoreNatureDictionary.txt,不存在其中的标注为null词性的词视为新词,以上两例句识别出的新词分别为:

识别到新词:,(wc: 1)
识别到新词:@(wc: 1), hankcs(wc: 1), [(wc: 1), ](wc: 1), .(wc: 3)

整体效果不错,诸如"hankcs"词识别出了,但像",", "@", "[", "]", "."等标点符号也被视为新词。能够在CRF分词之后加入停用词之类的做法,过滤掉此类的词呢?

谢谢!

扩展词库加入英文,输入扩展英文连接另一英文,分词会报错。

扩展词库加入英文,输入扩展英文连接另一英文,分词会报错。
原本以为是自定词性的问题,但将词性改为n,仍会报错

词库内容为
BENQ n 1024
BENTLEY n 1024

输入"BENQphone";
使用标准分词 HanLP.segment(text)

开启debug如下:

粗分词网:
0:[ ]
1:[BENQ]
2:[ENQphone]
3:[]
4:[]
5:[]
6:[]
7:[]
8:[]
9:[]
10:[ ]

会报出这样的错误

Exception in thread "main" java.lang.IllegalArgumentException: Illegal Capacity: -1
at java.util.ArrayList.(ArrayList.java:142)
at com.hankcs.hanlp.seg.HiddenMarkovModelSegment.convert(HiddenMarkovModelSegment.java:238)
at com.hankcs.hanlp.seg.Viterbi.ViterbiSegment.segSentence(ViterbiSegment.java:50)
at com.hankcs.hanlp.seg.Segment.seg(Segment.java:144)
at com.hankcs.hanlp.tokenizer.StandardTokenizer.segment(StandardTokenizer.java:39)
at com.hankcs.hanlp.HanLP.segment(HanLP.java:354)

原因是 com.hankcs.hanlp.seg.Viterbi.ViterbiSegment 中 47行
List vertexList = viterbi(wordNetAll);

返回结果
vertexList =[ ]
vertexList.size() = 1

但输入 "BENQBENTLEYphone"

则输出没报错,但结果不是想要的

人名角色观察:[ A 42634591 ][BENQ A 42634591 ][B L 3 ][ENTLEYphone A 42634591 ][ A 42634591 ]
人名角色标注:[ /A ,BENQ/A ,B/L ,ENTLEYphone/A , /A]
[BENQ/n, B/nx, ENTLEYphone/nx]

请问该如何修改才能添加英文词库呢?

关于提高机构识别精度问题

找了一段财经媒体的报道,尝试对公司名称进行识别。内容是“2015年7月10日,公司全资子公司深圳市中航九方资产管理有限公司(以下简称“中航九方”)与深圳市中航华城置业发展有限公司(以下简称“中航华城置业”)签订了《租赁推广服务协议》和《管理、租赁、推广与咨询协议》,由中航九方受托为中航华城置业持有的深圳九方购物中心(以下简称“深圳九方”)(G/M、H地块)提供前期租赁推广服务以及商业运营、维修保养、财务管理等商业咨询服务。中航华城置业将按照前述协议约定分别向中航九方支付租赁推广服务费和咨询服务费,预计相关费用总收入约为451万元。”

我用的是上半年1.1.4以前的版本,识别出来的结果如下:

[2015/m, 年/q, 7/m, 月/n, 10/m, 日/ag, ,/w, 公司/nit, 全资/nr, 子公司/nit, 深圳市/nr2, 中航/gg, 九/ag, 方资产管理有限公司/nsf, (/w, 以下/tg, 简称/s, “/xx, 中航/gg, 九/ag, 方/mq, ”/xx, )/w, 与/pbei, 深圳市中航华城置业发展有限公司/nsf, (/w, 以下/tg, 简称/s, “/xx, 中航华城/nr2, 置业/n, ”/xx, )/w, 签订/s, 了/u, 《/xx, 租赁/v, 推广/v, 服务/v, 协议/n, 》/xx, 和/pbei, 《/xx, 管理/v, 、/xx, 租赁/v, 、/xx, 推广/v, 与/pbei, 咨询/v, 协议/n, 》/xx, ,/w, 由/dg, 中航/nr, 九/ag, 方/mq, 受/s, 托/s, 为/dg, 中航华城/nr2, 置业/n, 持有/s, 的/ule, 深圳/nr2, 九方购物中心/nsf, (/w, 以下/tg, 简称/s, “/xx, 深圳/nr2, 九/ag, 方/mq, ”/xx, )/w, (/w, G/M/nx, 、/xx, H/nx, 地块/n, )/w, 提供/s, 前期/tg, 租赁/v, 推广/v, 服务/v, 以及/pbei, 商业/n, 运营/v, 、/xx, 维修/v, 保养/v, 、/xx, 财务/n, 管理/v, 等/ude3, 商业/n, 咨询服务/s, 。/xx, 中航华城/nr2, 置业/n, 将/qv, 按照/dg, 前述/ag, 协议/n, 约定/s, 分别/qv, 向/dg, 中航/nr, 九/ag, 方/mq, 支付/s, 租赁/v, 推广/v, 服务费/n, 和/pbei, 咨询服务/s, 费/n, ,/w, 预计/s, 相关/v, 费用/n, 总收入/n, 约/qv, 为/dg, 451/m, 万元/mq, 。/xx]

看上去只正确识别到了1个完全准确的全称,另外1个全称,3个简称似乎都没有识别精确。请看看是否有办法提高这个?谢谢!

大赞,不过摘要效果有点问题

提供的例子结果是:
[无限算法的产生是由于未能确定的定义终止条件, 这类算法在有限的时间内终止, 这类算法在有限的一段时间内终止]

看来还是有很多优化空间的。

不过这么全面的NLP package已经很赞了,剩下的优化过程其实相对容易一些啦~

关键词提取算法会出现重复关键词

List textrank = HanLP.extractKeyword(article, 5);

输出:市场 设备 idc 穿戴 fitbit fitbit
输入:新浪科技讯 北京时间6月7日早间消息,IDC近期公布了“全球市场季度可穿戴设备跟踪报告”,第一季度Fitbit是全球排名第一的可穿戴设备厂商。然而,随着苹果Apple Watch的全面开售,Fitbit的优势很可能将不复存在。

  IDC公布的数据显示,2015年第一季度,Fitbit、小米和Garmin是全球前三大可穿戴设备厂商。不过,苹果今年4月开始销售Apple Watch。因此当第二季度数据发布时,苹果将跻身这一排行的前列。

  IDC可穿戴设备研究经理雷蒙·拉马斯(Ramon Llamas)表示:“Apple Watch很可能将成为其他可穿戴设备的对比对象。这将迫使竞争对手采取措施,以保持在市场的领先优势。”

  整体来看,第一季度可穿戴设备市场同比增长200%,全球出货量为1140万个。这表明,这一市场非常强劲。

  拉马斯表示:“第一季度,即‘后假日季’时段销售滑坡不明显,这表明可穿戴设备市场非常强劲。终端用户的兴趣不断提升,而相关厂商可以提供多样化的设备和体验。此外,新兴市场的需求正在上升,而厂商渴望把握这些新机会。”

  导致Apple Watch无法主宰市场的一大障碍在于,这款产品的入门价格较高。IDC指出,价格下降是推动可穿戴设备销售火爆的原因之一。Apple Watch的起步价格为349美元,是其他可穿戴设备平均价格的3倍。IDC估计,有40%的可穿戴设备价格低于100美元。

  IDC全球移动设备跟踪报告高级分析师杰特什·乌布拉尼(Jitesh Ubrani)表示:“与任何新生市场一样,价格下降非常猛烈。在平均价格下降的情况下,苹果携一款高价产品入市将检验用户是否愿意为某一品牌,或是受市场关注的产品而支付更高的价格。”

  IDC的数据显示,第一季度,Fitbit的设备出货量为390万个,市场份额为34%,这是由于Charge、Charge HR和Surge等新产品的需求强劲。此外,用户也在继续追捧Fitbit的Flex、One和Zip等产品。IDC认为,同时专注于休闲和高端市场是Fitbit取得成功的重要原因。

  Fitbit的市场份额比排名第二的小米高10%。小米排名第二主要是依靠小米手环在**国内市场的销售。IDC认为,小米将很快进一步开拓国际市场,从而成为Fitbit的有力竞争对手。

  与Fitbit类似,Garmin也提供了多样化的可穿戴设备产品。不过,Garmin的市场份额仅略高于6%。

  三星排名第四。IDC分析师指出,三星的表现不佳主要是由于,其Gear设备只能连接某些高端的三星智能手机。

  Jawbone、索尼和Pebble正在争夺市场第五的位置,而第一季度Jawbone取得了领先。拉马斯和乌尔巴尼表示,Jawbone的UP MOVE和UP24第一季度带来了帮助。而随着第二季度Jawbone再推出两款新产品,这样的优势还将得到加强。(维金)

自定义词典似乎没用

System.out.println(CustomDictionary.add("高大上","a 1024"));
termList = HanLP.segment("外观绝对高大上,不信的是没见过.");
System.out.println(termList);

输出结果

[外观/n, 绝对/d, 高大/a, 上/f, ,/w, 不信/v, 的/ude1, 是/vshi, 没/d, 见过/v, ./w]

配置文件大小写问题

linux下大小写敏感,按照文档配置hanlp.properties会有问题,需要把hanlp.properties的全部字母小写。
另linux下出现“字符类型对应表加载失败”,解决如下。HanLP.Config.CharTypePath="/var/server/java/data/dictionary/other/CharType.dat.yes";

人名和組織機構識別經常包含標點的問題

例如机构识别出:“美國,中華隊”
标点问题需要一个解决方案,CommonAhoCorasickSegmentUtil会把标点作为未知语素和前后的语素合并,显然不太合理。标点分词的优先级应该提高。

关于分词的问题?

博主! 你好!
分词"手机套",结果:[手机/n, 套/q]
但是在词库CoreNatureDictionary.txt中找到有手机套的相关词,如下:
Line 11870: 使手机 n 2
Line 61022: 手机 n 6656
Line 61023: 手机党 nz 2
Line 61024: 手机卡 nz 17
Line 61025: 手机套 nz 2
Line 61026: 手机报 nz 37
Line 137480: 部手机 n 53
为什么分词不是分成 [手机套/nz] 呢 

加入了对数量词的识别!

博主! 我加入了对数量词的识别! 主题代码如下:
package com.hankcs.hanlp.recognition.mq;

import com.hankcs.hanlp.HanLP;
import com.hankcs.hanlp.corpus.tag.Nature;
import com.hankcs.hanlp.dictionary.CoreDictionary;
import com.hankcs.hanlp.seg.common.Vertex;
import com.hankcs.hanlp.seg.common.WordNet;
import com.hankcs.hanlp.utility.Predefine;

import java.util.List;
import java.util.ListIterator;

import static com.hankcs.hanlp.dictionary.nr.NRConstant.WORD_ID;

/**

  • 数量词识别
  • @author hankcs
    /
    public class TranslatedQuantifierRecognition
    {
    /
    *
    • 执行识别

    • @param segResult 粗分结果

    • @param wordNetOptimum 粗分结果对应的词图

    • @param wordNetAll 全词图
      */
      public static void Recognition(List segResult, WordNet wordNetOptimum, WordNet wordNetAll)
      {
      StringBuilder sbQuantifier = new StringBuilder();
      int appendTimes = 0;
      ListIterator listIterator = segResult.listIterator();
      listIterator.next();
      int line = 1;
      int activeLine = 1;
      while (listIterator.hasNext())
      {
      Vertex vertex = listIterator.next();
      if (appendTimes > 0)
      {
      if (vertex.guessNature() == Nature.q ||vertex.guessNature() == Nature.qt
      ||vertex.guessNature() == Nature.qv
      || vertex.guessNature() == Nature.qt
      ||vertex.guessNature() == Nature.nx)
      {
      sbQuantifier.append(vertex.realWord);
      ++appendTimes;
      }
      else
      {
      // 识别结束
      if (appendTimes > 1)
      {
      if (HanLP.Config.DEBUG)
      {
      System.out.println("数量词识别出:" + sbQuantifier.toString());
      }
      wordNetOptimum.insert(activeLine, new Vertex(Predefine.TAG_QUANTIFIER, sbQuantifier.toString(), new CoreDictionary.Attribute(Nature.mq), WORD_ID), wordNetAll);
      }
      sbQuantifier.setLength(0);
      appendTimes = 0;
      }
      }
      else
      {
      // 数字m触发识别
      if (vertex.guessNature() == Nature.m)
      {
      sbQuantifier.append(vertex.realWord);
      ++appendTimes;
      activeLine = line;
      }
      }

      line += vertex.realWord.length();
      

      }
      }
      }

按照你手册上提供方法添加人名误判不成功

按照你提供的方法,修改了data /dictionary / person / nr.txt,加入一个新词条,但是系统依然误判。
比如:“万余元” 本不该是人名,添加该词条,但是最终结果依然误判!求解决方法。

while 方法可能少写break

java新手第一次使用github,如有缺失请见谅

使用 findbugs找到的,报以下错误
Value of Node.label from previous case is overwritten here due to switch statement fall through [Scariest(1), High confidence]

在 com.hankcs.hanlp.dependency.common.Node的第182行

        case wh:
            label = "x";
        case begin:
            label = "root";
            break;

case wh 没有break ,不确定这样是否会造成问题。

时间标准化的问题

不知道大神有没有时间加一个时间标准化的模块?另外,时间的判断好像也有些问题,例如 下午/t, 3/m, 时由/nr, 北京/ns, 出发/v, 这句话就没有把下午3时整个判断为时间,希望大神能改进下,谢谢。

Lucene5.3调用HanLP创建索引报错

在Lucene5.3调用HanLP创建索引的时候,报错如下:
Exception in thread "main" java.lang.AbstractMethodError: org.apache.lucene.analysis.Analyzer.createComponents(Ljava/lang/String;)Lorg/apache/lucene/analysis/Analyzer$TokenStreamComponents;
at org.apache.lucene.analysis.Analyzer.tokenStream(Analyzer.java:179)
at org.apache.lucene.document.Field.tokenStream(Field.java:562)
at org.apache.lucene.index.DefaultIndexingChain$PerField.invert(DefaultIndexingChain.java:607)
at org.apache.lucene.index.DefaultIndexingChain.processField(DefaultIndexingChain.java:344)
at org.apache.lucene.index.DefaultIndexingChain.processDocument(DefaultIndexingChain.java:300)
at org.apache.lucene.index.DocumentsWriterPerThread.updateDocument(DocumentsWriterPerThread.java:234)
at org.apache.lucene.index.DocumentsWriter.updateDocument(DocumentsWriter.java:450)
at org.apache.lucene.index.IndexWriter.updateDocument(IndexWriter.java:1475)
at org.apache.lucene.index.IndexWriter.addDocument(IndexWriter.java:1254)
at com.ohoyee.test.search.SearchTest.createIndex(SearchTest.java:51)
at com.ohoyee.test.search.SearchTest.main(SearchTest.java:104)

索引创建代码如下:
static void createIndex() throws Exception {
Directory dir = FSDirectory.open(Paths.get(indexPath, new String[0]));
Analyzer analyzer = new HanLPAnalyzer();
IndexWriterConfig iwc = new IndexWriterConfig(analyzer);
IndexWriter writer = new IndexWriter(dir, iwc);
File[] files = new File(targetPath).listFiles();
for (File file : files) {
Document doc = new Document();
String content = getContent(file);
String name = file.getName();
String path = file.getAbsolutePath();
doc.add(new TextField("content", content, Store.YES));
doc.add(new TextField("name", name, Store.YES));
doc.add(new TextField("path", path, Store.YES));
System.out.println(name + "===" + content + "===" + path);
writer.addDocument(doc);
writer.commit();
}

}

如何添加新的停用词(还是不行)

我在dictionary目录下的默认停用词文件中添加新的停用词,重新运行之后发现新的停用词没有去掉。
如果先删除缓存文件再添加词语也不行,但按照这种方法添加自定义词语是有效的,但添加停用词不行。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.