前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Python NLTK 自然语言处理入门与例程

Python NLTK 自然语言处理入门与例程

作者头像
Sepmer Fi
发布于 2018-02-23 08:12:50
发布于 2018-02-23 08:12:50
6.2K00
代码可运行
举报
运行总次数:0
代码可运行
  • 在这篇文章中,我们将基于 Python 讨论自然语言处理(NLP)。本教程将会使用 Python NLTK 库。NLTK 是一个当下流行的,用于自然语言处理的 Python 库。

那么 NLP 到底是什么?学习 NLP 能带来什么好处?

简单的说,自然语言处理( NLP )就是开发能够理解人类语言的应用程序和服务。

我们生活中经常会接触的自然语言处理的应用,包括语音识别语音翻译,理解句意,理解特定词语的同义词,以及写出语法正确,句意通畅的句子和段落。

NLP的作用

正如大家所知,每天博客,社交网站和网页会产生数亿字节的海量数据。

有很多公司热衷收集所有这些数据,以便更好地了解他们的用户和用户对产品的热情,并对他们的产品或者服务进行合适的调整。

这些海量数据可以揭示很多现象,打个比方说,巴西人对产品 A 感到满意,而美国人却对产品 B 更感兴趣。通过NLP,这类的信息可以即时获得(即实时结果)。例如,搜索引擎正是一种 NLP,可以在正确的时间给合适的人提供适当的结果。

但是搜索引擎并不是自然语言处理(NLP)的唯一应用。还有更好更加精彩的应用。

NLP的应用

以下都是自然语言处理(NLP)的一些成功应用:

  • 搜索引擎,比如谷歌,雅虎等等。谷歌等搜索引擎会通过NLP了解到你是一个科技发烧友,所以它会返回科技相关的结果。
  • 社交网站信息流,比如 Facebook 的信息流。新闻馈送算法通过自然语言处理了解到你的兴趣,并向你展示相关的广告以及消息,而不是一些无关的信息。
  • 语音助手,诸如苹果 Siri。
  • 垃圾邮件程序,比如 Google 的垃圾邮件过滤程序 ,这不仅仅是通常会用到的普通的垃圾邮件过滤,现在,垃圾邮件过滤器会对电子邮件的内容进行分析,看看该邮件是否是垃圾邮件。

NLP库

现在有许多开源的自然语言处理(NLP)库。比如:

  • Natural language toolkit (NLTK)
  • Apache OpenNLP
  • Stanford NLP suite
  • Gate NLP library

自然语言工具包(NLTK)是最受欢迎的自然语言处理(NLP)库。它是用 Python 语言编写的,背后有强大的社区支持。

NLTK 也很容易入门,实际上,它将是你用到的最简单的自然语言处理(NLP)库。

在这个 NLP 教程中,我们将使用 Python NLTK 库。在开始安装 NLTK 之前,我假设你知道一些 Python入门知识

安装 NLTK

如果你使用的是 Windows , Linux 或 Mac,你可以 使用PIP 安装NLTK: # pip install nltk。

在本文撰写之时,你可以在 Python 2.7 , 3.4 和 3.5 上都可以使用NLTK。或者可以通过获取tar 进行源码安装

要检查 NLTK 是否正确地安装完成,可以打开你的Python终端并输入以下内容:Import nltk。如果一切顺利,这意味着你已经成功安装了 NLTK 库。

一旦你安装了 NLTK,你可以运行下面的代码来安装 NLTK 包:

代码语言:js
AI代码解释
复制
import nltk
nltk.download()

这将打开 NLTK 下载器来选择需要安装的软件包。

你可以选择安装所有的软件包,因为它们的容量不大,所以没有什么问题。现在,我们开始学习吧!

使用原生 Python 来对文本进行分词

首先,我们将抓取一些网页内容。然后来分析网页文本,看看爬下来的网页的主题是关于什么。我们将使用 urllib模块来抓取网页:

代码语言:js
AI代码解释
复制
import urllib.request
response = urllib.request.urlopen('http://php.net/')
html = response.read()
print (html)

从打印输出中可以看到,结果中包含许多需要清理的HTML标记。我们可以用这个 BeautifulSoup 库来对抓取的文本进行处理:

代码语言:js
AI代码解释
复制
from bs4 import BeautifulSoup
import urllib.request 
response = urllib.request.urlopen('http://php.net/') 
html = response.read()
soup = BeautifulSoup(html,"html5lib")
text = soup.get_text(strip=True)
print (text)

现在,我们能将抓取的网页转换为干净的文本。这很棒,不是么?

最后,让我们通过以下方法将文本分词:

代码语言:js
AI代码解释
复制
from bs4 import BeautifulSoup 
import urllib.request 
response = urllib.request.urlopen('http://php.net/') 
html = response.read() 
soup = BeautifulSoup(html,"html5lib") 
text = soup.get_text(strip=True) 
tokens = [t for t in text.split()] 
print (tokens)

词频统计

现在的文本相比之前的 html 文本好多了。我们再使用 Python NLTK 来计算每个词的出现频率。NLTK 中的FreqDist( ) 函数可以实现词频统计的功能 :

代码语言:js
AI代码解释
复制
from bs4 import BeautifulSoup
import urllib.request
import nltk 
response = urllib.request.urlopen('http://php.net/') 
html = response.read() 
soup = BeautifulSoup(html,"html5lib") 
text = soup.get_text(strip=True) 
tokens = [t for t in text.split()] 
freq = nltk.FreqDist(tokens) 
for key,val in freq.items(): 
    print (str(key) + ':' + str(val))

如果你查看输出结果,会发现最常用的词语是PHP。

你可以用绘图函数为这些词频绘制一个图形: freq.plot(20, cumulative=False)。

从图中,你可以肯定这篇文章正在谈论 PHP。这很棒!有一些词,如"the," "of," "a," "an," 等等。这些词是停止词。一般来说,停止词语应该被删除,以防止它们影响我们的结果。

使用 NLTK 删除停止词

NLTK 具有大多数语言的停止词表。要获得英文停止词,你可以使用以下代码:

代码语言:js
AI代码解释
复制
from nltk.corpus import stopwords
stopwords.words('english')

现在,让我们修改我们的代码,并在绘制图形之前清理标记。首先,我们复制一个列表。然后,我们通过对列表中的标记进行遍历并删除其中的停止词:

代码语言:js
AI代码解释
复制
clean_tokens = tokens[:] 
sr = stopwords.words('english')
for token in tokens:
    if token in stopwords.words('english'):
        clean_tokens.remove(token)

你可以在这里查看Python List 函数, 了解如何处理列表。

最终的代码应该是这样的:

代码语言:js
AI代码解释
复制
from bs4 import BeautifulSoup 
import urllib.request 
import nltk 
from nltk.corpus import stopwords 
response = urllib.request.urlopen('http://php.net/') 
html = response.read() 
soup = BeautifulSoup(html,"html5lib") 
text = soup.get_text(strip=True) 
tokens = [t for t in text.split()] 
clean_tokens = tokens[:] 
sr = stopwords.words('english') 
for token in tokens: 
    if token in stopwords.words('english'): 
        clean_tokens.remove(token) 
freq = nltk.FreqDist(clean_tokens) 
for key,val in freq.items(): 
    print (str(key) + ':' + str(val))

如果你现在检查图表,会感觉比之前那张图标更加清晰,因为没有了停止词的干扰。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
freq.plot(20,cumulative=False)

使用 NLTK 对文本分词

我们刚刚了解了如何使用 split( ) 函数将文本分割为标记 。现在,我们将看到如何使用 NLTK 对文本进行标记化。对文本进行标记化是很重要的,因为文本无法在没有进行标记化的情况下被处理。标记化意味着将较大的部分分隔成更小的单元。

你可以将段落分割为句子,并根据你的需要将句子分割为单词。NLTK 具有内置的句子标记器和词语标记器。

假设我们有如下的示例文本:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hello Adam, how are you? I hope everything is going well.  Today is a good day, see you dude.

为了将这个文本标记化为句子,我们可以使用句子标记器:

代码语言:js
AI代码解释
复制
from nltk.tokenize import sent_tokenize 
mytext = "Hello Adam, how are you? I hope everything is going well. Today is a good day, see you dude." 
print(sent_tokenize(mytext))

输出如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['Hello Adam, how are you?', 'I hope everything is going well.', 'Today is a good day, see you dude.']

你可能会说,这是一件容易的事情。我不需要使用 NLTK 标记器,并且我可以使用正则表达式来分割句子,因为每个句子前后都有标点符号或者空格。

那么,看看下面的文字:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hello Mr. Adam, how are you? I hope everything is going well. Today is a good day, see you dude.

呃!Mr. 是一个词,虽然带有一个符号。让我们来试试使用 NLTK 进行分词:

代码语言:js
AI代码解释
复制
from nltk.tokenize import sent_tokenize 
mytext = "Hello Mr. Adam, how are you? I hope everything is going well. Today is a good day, see you dude." 
print(sent_tokenize(mytext))

输出如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['Hello Mr. Adam, how are you?', 'I hope everything is going well.', 'Today is a good day, see you dude.']

Great!结果棒极了。然后我们尝试使用词语标记器来看看它是如何工作的:

代码语言:js
AI代码解释
复制
from nltk.tokenize import word_tokenize
mytext = "Hello Mr. Adam, how are you? I hope everything is going well. Today is a good day, see you dude."
print(word_tokenize(mytext))

输出如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['Hello', 'Mr.', 'Adam', ',', 'how', 'are', 'you', '?', 'I', 'hope', 'everything', 'is', 'going', 'well', '.', 'Today', 'is', 'a', 'good', 'day', ',', 'see', 'you', 'dude', '.']

正如所料,Mr. 是一个词,也确实被 NLTK 当做一个词。NLTK使用 nltk.tokenize.punkt module 中的 PunktSentenceTokenizer 进行文本分词。这个标记器经过了良好的训练,可以对多种语言进行分词 。

标记非英语语言文本

为了标记其他语言,可以像这样指定语言:

代码语言:js
AI代码解释
复制
from nltk.tokenize import sent_tokenize
mytext = "Bonjour M. Adam, comment allez-vous? J'espère que tout va bien. Aujourd'hui est un bon jour."
print(sent_tokenize(mytext,"french"))

结果将是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['Bonjour M. Adam, comment allez-vous?', "J'espère que tout va bien.", "Aujourd'hui est un bon jour."]

NLTk 对其他非英语语言的支持也非常好!

从 WordNet 获取同义词

如果你还记得我们使用 nltk.download( ) 安装 NLTK 的扩展包时。其中一个扩展包名为 WordNet。WordNet 是为自然语言处理构建的数据库。它包括部分词语的一个同义词组和一个简短的定义。

通过 NLTK 你可以得到给定词的定义和例句:

代码语言:js
AI代码解释
复制
from nltk.corpus import wordnet
syn = wordnet.synsets("pain")
print(syn[0].definition())
print(syn[0].examples())

结果是:

代码语言:js
AI代码解释
复制
a symptom of some physical hurt or disorder
['the patient developed severe pain and distension']

WordNet 包含了很多词的定义:

代码语言:js
AI代码解释
复制
from nltk.corpus import wordnet
syn = wordnet.synsets("NLP")
print(syn[0].definition())
syn = wordnet.synsets("Python")
print(syn[0].definition())

结果是:

代码语言:js
AI代码解释
复制
the branch of information science that deals with natural language information
large Old World boas

您可以使用 WordNet 来获得同义词:

代码语言:js
AI代码解释
复制
from nltk.corpus import wordnet 
synonyms = []
for syn in wordnet.synsets('Computer'):
    for lemma in syn.lemmas():
        synonyms.append(lemma.name())
print(synonyms)

输出是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['computer', 'computing_machine', 'computing_device', 'data_processor', 'electronic_computer', 'information_processing_system', 'calculator', 'reckoner', 'figurer', 'estimator', 'computer']

Cool!

从 WordNet 获取反义词

你可以用同样的方法得到单词的反义词。你唯一要做的是在将 lemmas 的结果加入数组之前,检查结果是否确实是一个正确的反义词。

代码语言:js
AI代码解释
复制
from nltk.corpus import wordnet
antonyms = []
for syn in wordnet.synsets("small"):
    for l in syn.lemmas():
        if l.antonyms():
            antonyms.append(l.antonyms()[0].name())
print(antonyms)

输出是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
['large', 'big', 'big']

这就是 NLTK 在自然语言处理中的力量。

NLTK词干提取

单词词干提取就是从单词中去除词缀并返回词根。(比方说 working 的词干是 work。)搜索引擎在索引页面的时候使用这种技术,所以很多人通过同一个单词的不同形式进行搜索,返回的都是相同的,有关这个词干的页面。

词干提取的算法有很多,但最常用的算法是 Porter 提取算法。NLTK 有一个 PorterStemmer 类,使用的就是 Porter 提取算法。

代码语言:js
AI代码解释
复制
from nltk.stem import PorterStemmer
stemmer = PorterStemmer() 
print(stemmer.stem('working'))

结果是: work

结果很清楚。

还有其他一些提取算法,如 Lancaster 提取算法。这个算法的输出同 Porter 算法的结果在几个单词上不同。你可以尝试他们两个算法来查看有哪些不同结果。

提取非英语单词词干

SnowballStemmer 类,除了英语外,还可以适用于其他 13 种语言。支持的语言如下:

代码语言:js
AI代码解释
复制
from nltk.stem import SnowballStemmer
print(SnowballStemmer.languages)
'danish', 'dutch', 'english', 'finnish', 'french', 'german', 'hungarian', 'italian', 'norwegian', 'porter', 'portuguese', 'romanian', 'russian', 'spanish', 'swedish'

你可以使用 SnowballStemmer 类的 stem( )函数来提取非英语单词,如下所示:

代码语言:js
AI代码解释
复制
from nltk.stem import SnowballStemmer
french_stemmer = SnowballStemmer('french')
print(french_stemmer.stem("French word"))

来自法国的朋友欢迎在评论区 poll 出你们测试的结果!

使用 WordNet 引入词汇

词汇的词汇化与提取词干类似,但不同之处在于词汇化的结果是一个真正的词汇。与词干提取不同,当你试图提取一些词干时,有可能会导致这样的情况:

代码语言:js
AI代码解释
复制
from nltk.stem import PorterStemmer 
stemmer = PorterStemmer() 
print(stemmer.stem('increases'))

结果是:increas。

现在,如果我们试图用NLTK WordNet来还原同一个词,结果会是正确的:

代码语言:js
AI代码解释
复制
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('increases'))

结果是 increase。

结果可能是同义词或具有相同含义的不同词语。有时,如果你试图还原一个词,比如 playing,还原的结果还是 playing。这是因为默认还原的结果是名词,如果你想得到动词,可以通过以下的方式指定。

代码语言:js
AI代码解释
复制
from nltk.stem import WordNetLemmatizer
lemmatizer = WordNetLemmatizer()
print(lemmatizer.lemmatize('playing', pos="v"))

结果是: play。

实际上,这是一个非常好的文本压缩水平。最终压缩到原文本的 50% 到 60% 左右。结果可能是动词,名词,形容词或副词:

代码语言:js
AI代码解释
复制
from nltk.stem import WordNetLemmatizer 
lemmatizer = WordNetLemmatizer() 
print(lemmatizer.lemmatize('playing', pos="v")) 
print(lemmatizer.lemmatize('playing', pos="n")) 
print(lemmatizer.lemmatize('playing', pos="a")) 
print(lemmatizer.lemmatize('playing', pos="r"))

结果是:

代码语言:js
AI代码解释
复制
play 
playing 
playing 
playing

词干化和词化差异

好吧,让我们分别尝试一些单词的词干提取和词形还原:

代码语言:js
AI代码解释
复制
from nltk.stem import WordNetLemmatizer 
from nltk.stem import PorterStemmer 
stemmer = PorterStemmer() 
lemmatizer = WordNetLemmatizer() 
print(stemmer.stem('stones')) 
print(stemmer.stem('speaking')) 
print(stemmer.stem('bedroom')) 
print(stemmer.stem('jokes')) 
print(stemmer.stem('lisa')) 
print(stemmer.stem('purple')) 
print('----------------------') 
print(lemmatizer.lemmatize('stones')) 
print(lemmatizer.lemmatize('speaking'))
print(lemmatizer.lemmatize('bedroom'))
print(lemmatizer.lemmatize('jokes'))
print(lemmatizer.lemmatize('lisa'))
print(lemmatizer.lemmatize('purple'))

结果是:

代码语言:js
AI代码解释
复制
stone 
speak 
bedroom 
joke 
lisa 
purpl 
---------------------- 
stone 
speaking 
bedroom
joke
lisa
purple

词干提取的方法可以在不知道语境的情况下对词汇使用,这就是为什么它相较词形还原方法速度更快但准确率更低。

在我看来,词形还原比提取词干的方法更好。词形还原,如果实在无法返回这个词的变形,也会返回另一个真正的单词;这个单词可能是一个同义词,但不管怎样这是一个真正的单词。当有时候,你不关心准确度,需要的只是速度。在这种情况下,词干提取的方法更好。

我们在本 NLP 教程中讨论的所有步骤都涉及到文本预处理。在以后的文章中,我们将讨论使用Python NLTK进行文本分析

评论
登录后参与评论
13 条评论
热度
最新
大佬好强,有一点不明白,applicationservice 和 projectService 之间的区别是什么呢
大佬好强,有一点不明白,applicationservice 和 projectService 之间的区别是什么呢
回复回复点赞举报
感谢楼主分享,非常全面易懂
感谢楼主分享,非常全面易懂
回复回复点赞举报
很详细了,但我想问个弱弱的问题,插件中的action和extension好理解,componet和service是干什么用的?或是为了解决什么问题,请各位大佬帮忙解惑
很详细了,但我想问个弱弱的问题,插件中的action和extension好理解,componet和service是干什么用的?或是为了解决什么问题,请各位大佬帮忙解惑
回复回复点赞举报
厉害
厉害
回复回复点赞举报
大佬太强了
大佬太强了
回复回复点赞举报
非常感谢!很有帮助!
非常感谢!很有帮助!
回复回复点赞举报
请教大神一个问题,能否使用javaFx 开发idea 插件,我使用javaFx但启动报错
请教大神一个问题,能否使用javaFx 开发idea 插件,我使用javaFx但启动报错
回复回复点赞举报
牛牛牛,收藏一波。
牛牛牛,收藏一波。
回复回复点赞举报
请问一下博主, 如果我想依赖我已经写好的jar包, 除了新建lib目录还有什么办法吗, maven好像并不可以用
请问一下博主, 如果我想依赖我已经写好的jar包, 除了新建lib目录还有什么办法吗, maven好像并不可以用
33点赞举报
maven只是系统帮你自动构建,不需要自己导包而已,应该没有什么区别,我用gradle是可以的
maven只是系统帮你自动构建,不需要自己导包而已,应该没有什么区别,我用gradle是可以的
回复回复点赞举报
主要是包和包之间有很多互相依赖的关系,我用的lib的方式好像只能把依赖手动加进来,不知道Gradle是怎么用的呢,就像maven那样可以把依赖都管理起来吗?
主要是包和包之间有很多互相依赖的关系,我用的lib的方式好像只能把依赖手动加进来,不知道Gradle是怎么用的呢,就像maven那样可以把依赖都管理起来吗?
回复回复点赞举报
查看全部3条回复
很详细了,感谢博主的分享
很详细了,感谢博主的分享
回复回复点赞举报
推荐阅读
Idea插件开发
https://www.w3cschool.cn/intellij_idea_doc/
码客说
2024/08/04
2790
Idea插件开发
IDEA 插件开发实战
IntelliJ IDEA 是一款开发工具,提供很多插件功能,比如阿里规范插件(Alibaba Java Coding Guidelines),但是随着日常业务展开,很多工作重复性编码,浪费很多时间,需要自定义抽象出来一些插件,自动化的方式解决问题,这也是工程师文化的体现。
CSDN技术头条
2020/02/19
2.6K0
idea插件开发指南_idea get set插件
gitee地址:https://gitee.com/jyq_18792721831/studyplugin.git idea插件开发入门 idea插件开发–配置 idea插件开发–服务-翻译插件 idea插件开发–组件–编程久坐提醒
全栈程序员站长
2022/11/10
5.8K0
idea插件开发指南_idea get set插件
Intellij IDEA--Android Studio插件开发
项目需求,需要开发IDE的插件,没开始之前以为会是个很麻烦和困难的事情,开始动手后发现其实步骤也就那么几步。 我平时主要使用的开发IDE就是android studio和pycharm。 本文主要介绍如何开发自己的Android Studio插件。Android Studio本来就是基于IDEA开发的,要开发AS的插件j就是基于IntelliJ IEDA的插件开发。
languageX
2021/01/26
2.7K0
《IntelliJ IDEA 插件开发》第三节:开发工具栏和Tab页,展示股票行情和K线
以前,我不懂。写的技术就是技术内容,写的场景就是场景分析,但从读者的阅读我发现,大家更喜欢的是技术与场景结合,尤其是用技术结合那些羞羞答答的场景,虽然嘴上都不说。
小傅哥
2021/11/19
2.4K0
IntelliJ插件开发-京东工程师教你改造你的IDE
王帅廷,京东 Android高级开发工程师,6年以上开发经验,对设计框架有着深刻的认识,负责京东商城研发工具的开发,设计并完成了多个IntelliJ插件的开发工作。
京东技术
2018/07/30
3.2K1
IntelliJ插件开发-京东工程师教你改造你的IDE
IDEA插件开发.01之简单入门
Idea插件SDK文档在线地址:https://plugins.jetbrains.com/docs/intellij/welcome.html
有一只柴犬
2024/01/25
5480
IDEA插件开发.01之简单入门
idea插件开发记录
插件开发示例 ---- 功能开发代码示例 java package com.cjl.plugins.code.hints; import com.cjl.plugins.code.code.NavigatorPanel; import com.cjl.plugins.code.http.HttpUtils; import com.cjl.plugins.code.json.Json; import com.intellij.codeInsight.hint.HintManager; import com.
司夜
2023/03/31
7350
idea插件开发记录
《IntelliJ IDEA 插件开发》第 五 节:IDEA工程右键菜单,自动生成ORM代码
几年前,大家并不是这样,那时候还有很多东西可以创新,乱世出英雄总能在一个方向深耕并做出一款款好用的产品功能、框架服务、技术组件等。但后来好像这样的情况开始减少了,取而代之的是重复、复刻、照搬,换个新的皮肤、换个新的样式、换个新的名字,就是取巧的新东西了。
小傅哥
2021/12/13
2.4K0
《IntelliJ IDEA 插件开发》第 五 节:IDEA工程右键菜单,自动生成ORM代码
IDEA插件开发
IDEA中内置多种插件,使我们在代码的开发过程中更加方便快捷。本文对环境配置和基础插件开发进行了讲解说明。
算法与编程之美
2022/01/04
1.8K0
IDEA插件开发
为了Markdown,我写了一款Jetbrains插件
最近做了一个Jetbrains的插件,叫markdown-index,它的作用是为Markdown文档的标题自动添加序号,效果如下:
蝉沐风
2022/12/19
8180
为了Markdown,我写了一款Jetbrains插件
IDEA插件开发.02之“异味”代码收集插件
许久没更新IDEA插件开发系列了。最近刚好在汇总日常开发中常见的代码“异味”,共享文档复制黏贴略显麻烦,所以想着是否可以搞一个IDEA插件来帮忙收集常见代码,毕竟IDEA作为后端程序员必备的开发工具,显然会方便很多。
有一只柴犬
2024/01/25
1580
IDEA插件开发.02之“异味”代码收集插件
《IntelliJ IDEA 插件开发》第四节:扩展创建工程向导步骤,开发DDD脚手架
你做这个东西的价值是什么?有竞品调研吗?能赋能业务吗?那不已经有同类的了,你为什么还自己造轮子?
小傅哥
2021/12/01
1.1K0
《IntelliJ IDEA 插件开发》第四节:扩展创建工程向导步骤,开发DDD脚手架
IDEA Web渲染插件开发(一)— 使用JCEF
目前网上已经有了很多关于IDEA(IntelliJ平台)的插件开发教程了,本人觉得简书上这位作者秋水畏寒 的关于插件开发的文章很不错,在我进行插件开发的过程中指导了我很多。但是综合下来看,在IDEA上加载网页的插件的教程还不是特别多,官方文档也不是那么的完整。本系列将会从这个角度出发,探讨如何编写加载Web页面的插件。
w4ngzhen
2023/10/16
2K0
IDEA Web渲染插件开发(一)— 使用JCEF
只需三步实现Databinding插件化
首先为何我要实现Databinding这个小插件,主要是在日常开发中,发现每次通过Android Studio的Layout resource file来创建xml布局文件时,布局文件的格式都没有包含Databinding所要的标签。导致的问题就是每次都要重复手动修改布局文件,添加标签等。
Rouse
2019/07/22
9960
只需三步实现Databinding插件化
基于IDEA的自动化代码审计插件开发初探
然后本文主要是给大家介绍一下怎么实现一个IDEA静态代码检测插件,现在都在讲安全左移嘛,我觉得静态代码检测插件就是一个安全左移很好的落地,于是就想着学习一下
tnt阿信
2021/04/26
1.8K0
基于IDEA的自动化代码审计插件开发初探
开发属于自己的第一款IDEA插件!
写Java代码的时候,经常会涉及到重复性的操作,这个时候就会想要是有这样一个插件就好了,如果是大家都会遇到的场景,IDE或许已经提供了,再不然也有可能有人编写了相关的插件。
良月柒
2020/02/24
7890
Intellij IDEA--Pycharm插件开发
Intellij IDEA开发--Pycharm插件开发 开发android用Android Studio;开发java用intelluj IDEA;开发python用Pycharm,其实三者都是je
languageX
2021/01/29
1.2K0
Intellij IDEA--Pycharm插件开发
开发属于自己的插件 | IDEA & Android Studio插件开发指南
谷轩宇——从事安卓开发,目前效力于通天塔技术开放组是否曾经被ide重复繁琐的操作所困扰,又或者没有心仪的UI控件而难受。那么请阅读这篇文章,掌握idea插件的开发流程,开发属于自己的插件,造福开源社区。
京东技术
2018/09/28
5K0
开发属于自己的插件 | IDEA & Android Studio插件开发指南
Intellij IDEA 插件开发之自建插件仓库
Intellij IDEA 有一个自己的官方的插件仓库,但是当我们的开发的 Intellij IDEA 的插件不能够对外公开时,我们就需要搭建自己的 Intellij IDEA 的插件仓库。前不久我们也尝试着使用Intellij IDEA自己开发一个插件点击打开链接。 搭建 Intellij IDEA 插件仓库 Intellij IDEA 的官方文档里面有提到怎么去新建一个插件仓库,但是,这部分的文档却不在 Intellij IDEA 插件的开发文档里面,而是在插件相关功能的使用文档里面:https://w
xiangzhihong
2018/02/05
4.9K0
Intellij IDEA 插件开发之自建插件仓库
推荐阅读
相关推荐
Idea插件开发
更多 >
LV.1
京东京东技术
目录
  • NLP的作用
  • NLP的应用
  • NLP库
  • 安装 NLTK
  • 使用原生 Python 来对文本进行分词
  • 词频统计
  • 使用 NLTK 删除停止词
  • 使用 NLTK 对文本分词
  • 标记非英语语言文本
  • 从 WordNet 获取同义词
  • 从 WordNet 获取反义词
  • NLTK词干提取
  • 提取非英语单词词干
  • 使用 WordNet 引入词汇
  • 词干化和词化差异
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档