PYTHON基础技能 – 23个Python在自然语言处理中的应用实例

释放双眼,带上耳机,听听看~!

1. 文本清洗

文本清洗是任何 NLP 项目的第一步。它涉及去除不需要的信息,如标点符号、数字、特殊字符等。

代码示例:


1
import&nbsp;re<br><br>def&nbsp;clean_text(text):<br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;去除标点符号</em><br>&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;re.sub(r'&#091;^\w\s]',&nbsp;'',&nbsp;text)<br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;去除数字</em><br>&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;re.sub(r'\d+',&nbsp;'',&nbsp;text)<br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;将所有字母转为小写</em><br>&nbsp;&nbsp;&nbsp;&nbsp;text&nbsp;=&nbsp;text.lower()<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;text<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"Hello,&nbsp;World!&nbsp;This&nbsp;is&nbsp;an&nbsp;example&nbsp;text&nbsp;with&nbsp;numbers&nbsp;123&nbsp;and&nbsp;symbols&nbsp;#@$."<br>cleaned_text&nbsp;=&nbsp;clean_text(text)<br><br>print(cleaned_text)&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;hello&nbsp;world&nbsp;this&nbsp;is&nbsp;an&nbsp;example&nbsp;text&nbsp;with&nbsp;numbers&nbsp;and&nbsp;symbols</em>

解释:

  • 使用
    1
    re

    模块的

    1
    sub()

    方法去除标点符号和数字。

  • 1
    lower()

    方法将所有字母转换为小写。

2. 分词

分词是将文本拆分成单词的过程。这有助于进一步处理,如词频统计、情感分析等。

代码示例:


1
from&nbsp;nltk.tokenize&nbsp;import&nbsp;word_tokenize<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"Hello,&nbsp;World!&nbsp;This&nbsp;is&nbsp;an&nbsp;example&nbsp;text."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;word_tokenize(text)<br><br>print(tokens)&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;&#091;'Hello',&nbsp;',',&nbsp;'World',&nbsp;'!',&nbsp;'This',&nbsp;'is',&nbsp;'an',&nbsp;'example',&nbsp;'text',&nbsp;'.']</em>

解释:

  • 使用
    1
    nltk

    库中的

    1
    word_tokenize()

    函数进行分词。

3. 去除停用词

停用词是指在文本中频繁出现但对语义贡献较小的词,如“the”、“is”等。

代码示例:


1
from&nbsp;nltk.corpus&nbsp;import&nbsp;stopwords<br>from&nbsp;nltk.tokenize&nbsp;import&nbsp;word_tokenize<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"The&nbsp;quick&nbsp;brown&nbsp;fox&nbsp;jumps&nbsp;over&nbsp;the&nbsp;lazy&nbsp;dog."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;word_tokenize(text)<br><br><em>#&nbsp;去除停用词</em><br>stop_words&nbsp;=&nbsp;set(stopwords.words('english'))<br>filtered_tokens&nbsp;=&nbsp;&#091;token&nbsp;for&nbsp;token&nbsp;in&nbsp;tokens&nbsp;if&nbsp;token.lower()&nbsp;not&nbsp;in&nbsp;stop_words]<br><br>print(filtered_tokens)&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;&#091;'quick',&nbsp;'brown',&nbsp;'fox',&nbsp;'jumps',&nbsp;'over',&nbsp;'lazy',&nbsp;'dog']</em>

解释:

  • 使用
    1
    nltk.corpus.stopwords

    获取英语停用词列表。

  • 使用列表推导式过滤掉停用词。

4. 词干提取

词干提取是将单词还原为其基本形式的过程,有助于减少词汇量。

代码示例:


1
from&nbsp;nltk.stem&nbsp;import&nbsp;PorterStemmer<br>from&nbsp;nltk.tokenize&nbsp;import&nbsp;word_tokenize<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"running&nbsp;dogs&nbsp;are&nbsp;barking&nbsp;loudly."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;word_tokenize(text)<br><br><em>#&nbsp;词干提取</em><br>stemmer&nbsp;=&nbsp;PorterStemmer()<br>stemmed_tokens&nbsp;=&nbsp;&#091;stemmer.stem(token)&nbsp;for&nbsp;token&nbsp;in&nbsp;tokens]<br><br>print(stemmed_tokens)&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;&#091;'run',&nbsp;'dog',&nbsp;'are',&nbsp;'bark',&nbsp;'loudli',&nbsp;'.']</em>

解释:

  • 使用
    1
    PorterStemmer

    对单词进行词干提取。

5. 词形还原

词形还原类似于词干提取,但它使用词典来找到单词的基本形式。

代码示例:


1
from&nbsp;nltk.stem&nbsp;import&nbsp;WordNetLemmatizer<br>from&nbsp;nltk.tokenize&nbsp;import&nbsp;word_tokenize<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"running&nbsp;dogs&nbsp;are&nbsp;barking&nbsp;loudly."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;word_tokenize(text)<br><br><em>#&nbsp;词形还原</em><br>lemmatizer&nbsp;=&nbsp;WordNetLemmatizer()<br>lemmatized_tokens&nbsp;=&nbsp;&#091;lemmatizer.lemmatize(token)&nbsp;for&nbsp;token&nbsp;in&nbsp;tokens]<br><br>print(lemmatized_tokens)&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;&#091;'running',&nbsp;'dog',&nbsp;'are',&nbsp;'barking',&nbsp;'loudly',&nbsp;'.']</em>

解释:

  • 使用
    1
    WordNetLemmatizer

    进行词形还原。

6. 词频统计

词频统计可以帮助我们了解文本中最常见的词汇。

代码示例:


1
from&nbsp;nltk.tokenize&nbsp;import&nbsp;word_tokenize<br>from&nbsp;nltk.probability&nbsp;import&nbsp;FreqDist<br>import&nbsp;matplotlib.pyplot&nbsp;as&nbsp;plt<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"This&nbsp;is&nbsp;a&nbsp;sample&nbsp;text.&nbsp;This&nbsp;text&nbsp;contains&nbsp;some&nbsp;words&nbsp;that&nbsp;are&nbsp;repeated&nbsp;several&nbsp;times."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;word_tokenize(text)<br><br><em>#&nbsp;计算词频</em><br>fdist&nbsp;=&nbsp;FreqDist(tokens)<br><br><em>#&nbsp;绘制词频图</em><br>plt.figure(figsize=(10,&nbsp;5))<br>fdist.plot(10)<br>plt.show()

解释:

  • 使用
    1
    FreqDist

    计算词频。

  • 使用
    1
    matplotlib

    绘制词频图。

7. 情感分析

情感分析用于判断文本的情感倾向,如正面、负面或中性。

代码示例:


1
from&nbsp;nltk.sentiment&nbsp;import&nbsp;SentimentIntensityAnalyzer<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"I&nbsp;love&nbsp;this&nbsp;movie.&nbsp;It's&nbsp;amazing!"<br><br><em>#&nbsp;情感分析</em><br>sia&nbsp;=&nbsp;SentimentIntensityAnalyzer()<br>sentiment_scores&nbsp;=&nbsp;sia.polarity_scores(text)<br><br>print(sentiment_scores)&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;{'neg':&nbsp;0.0,&nbsp;'neu':&nbsp;0.429,&nbsp;'pos':&nbsp;0.571,&nbsp;'compound':&nbsp;0.8159}</em>

解释:

  • 使用
    1
    SentimentIntensityAnalyzer

    进行情感分析。

8. 词向量化

词向量化将单词表示为数值向量,便于计算机处理。

代码示例:


1
import&nbsp;gensim.downloader&nbsp;as&nbsp;api<br><br><em>#&nbsp;加载预训练的&nbsp;Word2Vec&nbsp;模型</em><br>model&nbsp;=&nbsp;api.load("glove-twitter-25")<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"This&nbsp;is&nbsp;a&nbsp;sample&nbsp;sentence."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;text.split()<br><br><em>#&nbsp;向量化</em><br>vectorized_tokens&nbsp;=&nbsp;&#091;model&#091;token]&nbsp;for&nbsp;token&nbsp;in&nbsp;tokens&nbsp;if&nbsp;token&nbsp;in&nbsp;model.key_to_index]<br><br>print(vectorized_tokens)

解释:

  • 使用
    1
    gensim

    库加载预训练的 Word2Vec 模型。

  • 将单词转换为向量表示。

9. 主题建模

主题建模用于识别文档集合中的主题。

代码示例:


1
from&nbsp;gensim&nbsp;import&nbsp;corpora,&nbsp;models<br><br><em>#&nbsp;示例文本</em><br>documents&nbsp;=&nbsp;&#091;<br>&nbsp;&nbsp;&nbsp;&nbsp;"Human&nbsp;machine&nbsp;interface&nbsp;for&nbsp;lab&nbsp;abc&nbsp;computer&nbsp;applications",<br>&nbsp;&nbsp;&nbsp;&nbsp;"A&nbsp;survey&nbsp;of&nbsp;user&nbsp;opinion&nbsp;of&nbsp;computer&nbsp;system&nbsp;response&nbsp;time",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;EPS&nbsp;user&nbsp;interface&nbsp;management&nbsp;system",<br>&nbsp;&nbsp;&nbsp;&nbsp;"System&nbsp;and&nbsp;human&nbsp;system&nbsp;engineering&nbsp;testing&nbsp;of&nbsp;EPS",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Relation&nbsp;of&nbsp;user&nbsp;perceived&nbsp;response&nbsp;time&nbsp;to&nbsp;error&nbsp;measurement",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;generation&nbsp;of&nbsp;random&nbsp;binary&nbsp;unordered&nbsp;trees",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;intersection&nbsp;graph&nbsp;of&nbsp;paths&nbsp;in&nbsp;trees",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Graph&nbsp;minors&nbsp;IV&nbsp;Widths&nbsp;of&nbsp;trees&nbsp;and&nbsp;well&nbsp;quasi&nbsp;ordering",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Graph&nbsp;minors&nbsp;A&nbsp;survey"<br>]<br><br><em>#&nbsp;分词</em><br>texts&nbsp;=&nbsp;&#091;&#091;word&nbsp;for&nbsp;word&nbsp;in&nbsp;document.lower().split()]&nbsp;for&nbsp;document&nbsp;in&nbsp;documents]<br><br><em>#&nbsp;创建词典</em><br>dictionary&nbsp;=&nbsp;corpora.Dictionary(texts)<br><br><em>#&nbsp;转换为文档-词频矩阵</em><br>corpus&nbsp;=&nbsp;&#091;dictionary.doc2bow(text)&nbsp;for&nbsp;text&nbsp;in&nbsp;texts]<br><br><em>#&nbsp;LDA&nbsp;模型</em><br>lda&nbsp;=&nbsp;models.LdaModel(corpus,&nbsp;num_topics=2,&nbsp;id2word=dictionary,&nbsp;passes=10)<br><br><em>#&nbsp;打印主题</em><br>for&nbsp;topic&nbsp;in&nbsp;lda.print_topics(num_topics=2,&nbsp;num_words=5):<br>&nbsp;&nbsp;&nbsp;&nbsp;print(topic)

解释:

  • 使用
    1
    gensim

    库进行主题建模。

  • 使用 LDA 模型识别主题。

10. 文本分类

文本分类是将文本分配给预定义类别的过程。

代码示例:


1
from&nbsp;sklearn.feature_extraction.text&nbsp;import&nbsp;CountVectorizer<br>from&nbsp;sklearn.naive_bayes&nbsp;import&nbsp;MultinomialNB<br>from&nbsp;sklearn.model_selection&nbsp;import&nbsp;train_test_split<br>from&nbsp;sklearn.metrics&nbsp;import&nbsp;accuracy_score<br><br><em>#&nbsp;示例数据</em><br>documents&nbsp;=&nbsp;&#091;<br>&nbsp;&nbsp;&nbsp;&nbsp;"Human&nbsp;machine&nbsp;interface&nbsp;for&nbsp;lab&nbsp;abc&nbsp;computer&nbsp;applications",<br>&nbsp;&nbsp;&nbsp;&nbsp;"A&nbsp;survey&nbsp;of&nbsp;user&nbsp;opinion&nbsp;of&nbsp;computer&nbsp;system&nbsp;response&nbsp;time",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;EPS&nbsp;user&nbsp;interface&nbsp;management&nbsp;system",<br>&nbsp;&nbsp;&nbsp;&nbsp;"System&nbsp;and&nbsp;human&nbsp;system&nbsp;engineering&nbsp;testing&nbsp;of&nbsp;EPS",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Relation&nbsp;of&nbsp;user&nbsp;perceived&nbsp;response&nbsp;time&nbsp;to&nbsp;error&nbsp;measurement",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;generation&nbsp;of&nbsp;random&nbsp;binary&nbsp;unordered&nbsp;trees",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;intersection&nbsp;graph&nbsp;of&nbsp;paths&nbsp;in&nbsp;trees",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Graph&nbsp;minors&nbsp;IV&nbsp;Widths&nbsp;of&nbsp;trees&nbsp;and&nbsp;well&nbsp;quasi&nbsp;ordering",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Graph&nbsp;minors&nbsp;A&nbsp;survey"<br>]<br><br>labels&nbsp;=&nbsp;&#091;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;1,&nbsp;1,&nbsp;1,&nbsp;1]<br><br><em>#&nbsp;分词</em><br>vectorizer&nbsp;=&nbsp;CountVectorizer()<br>X&nbsp;=&nbsp;vectorizer.fit_transform(documents)<br><br><em>#&nbsp;划分训练集和测试集</em><br>X_train,&nbsp;X_test,&nbsp;y_train,&nbsp;y_test&nbsp;=&nbsp;train_test_split(X,&nbsp;labels,&nbsp;test_size=0.2,&nbsp;random_state=42)<br><br><em>#&nbsp;训练模型</em><br>classifier&nbsp;=&nbsp;MultinomialNB()<br>classifier.fit(X_train,&nbsp;y_train)<br><br><em>#&nbsp;预测</em><br>y_pred&nbsp;=&nbsp;classifier.predict(X_test)<br><br><em>#&nbsp;评估准确率</em><br>accuracy&nbsp;=&nbsp;accuracy_score(y_test,&nbsp;y_pred)<br>print(f"Accuracy:&nbsp;{accuracy:.2f}")

解释:

  • 使用
    1
    sklearn

    库进行文本分类。

  • 使用朴素贝叶斯分类器进行预测。

11. 命名实体识别(NER)

命名实体识别用于识别文本中的特定实体,如人名、地名等。

代码示例:


1
import&nbsp;spacy<br><br><em>#&nbsp;加载预训练模型</em><br>nlp&nbsp;=&nbsp;spacy.load("en_core_web_sm")<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"Apple&nbsp;is&nbsp;looking&nbsp;at&nbsp;buying&nbsp;U.K.&nbsp;startup&nbsp;for&nbsp;$1&nbsp;billion."<br><br><em>#&nbsp;处理文本</em><br>doc&nbsp;=&nbsp;nlp(text)<br><br><em>#&nbsp;提取实体</em><br>for&nbsp;ent&nbsp;in&nbsp;doc.ents:<br>&nbsp;&nbsp;&nbsp;&nbsp;print(ent.text,&nbsp;ent.label_)<br><br><em>#&nbsp;输出:</em><br><em>#&nbsp;Apple&nbsp;ORG</em><br><em>#&nbsp;U.K.&nbsp;GPE</em><br><em>#&nbsp;$1&nbsp;billion&nbsp;MONEY</em>

解释:

  • 使用
    1
    spacy

    库进行命名实体识别。

  • 提取文本中的实体及其类型。

12. 机器翻译

机器翻译用于将一种语言的文本转换为另一种语言。

代码示例:


1
from&nbsp;googletrans&nbsp;import&nbsp;Translator<br><br><em>#&nbsp;创建翻译器对象</em><br>translator&nbsp;=&nbsp;Translator()<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"Hello,&nbsp;how&nbsp;are&nbsp;you?"<br><br><em>#&nbsp;翻译文本</em><br>translated_text&nbsp;=&nbsp;translator.translate(text,&nbsp;src='en',&nbsp;dest='fr')<br><br>print(translated_text.text)&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;Bonjour,&nbsp;comment&nbsp;ça&nbsp;va&nbsp;?</em>

解释:

  • 使用
    1
    googletrans

    库进行文本翻译。

  • 将英文文本翻译成法文。

13. 文本摘要

文本摘要是生成文本的简洁版本,保留主要信息。

代码示例:


1
from&nbsp;transformers&nbsp;import&nbsp;pipeline<br><br><em>#&nbsp;创建摘要生成器</em><br>summarizer&nbsp;=&nbsp;pipeline("summarization")<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"""<br>Natural&nbsp;language&nbsp;processing&nbsp;(NLP)&nbsp;is&nbsp;a&nbsp;subfield&nbsp;of&nbsp;linguistics,&nbsp;computer&nbsp;science,&nbsp;<br>and&nbsp;artificial&nbsp;intelligence&nbsp;concerned&nbsp;with&nbsp;the&nbsp;interactions&nbsp;between&nbsp;computers&nbsp;and&nbsp;<br>human&nbsp;(natural)&nbsp;languages.&nbsp;As&nbsp;such,&nbsp;NLP&nbsp;is&nbsp;related&nbsp;to&nbsp;the&nbsp;area&nbsp;of&nbsp;human–computer&nbsp;interaction.<br>Many&nbsp;challenges&nbsp;in&nbsp;NLP&nbsp;involve&nbsp;natural&nbsp;language&nbsp;understanding,&nbsp;that&nbsp;is,&nbsp;enabling&nbsp;computers&nbsp;<br>to&nbsp;derive&nbsp;meaning&nbsp;from&nbsp;human&nbsp;or&nbsp;natural&nbsp;language&nbsp;input,&nbsp;and&nbsp;others&nbsp;involve&nbsp;natural&nbsp;language&nbsp;<br>generation.<br>"""<br><br><em>#&nbsp;生成摘要</em><br>summary&nbsp;=&nbsp;summarizer(text,&nbsp;max_length=100,&nbsp;min_length=30,&nbsp;do_sample=False)<br><br>print(summary&#091;0]&#091;'summary_text'])

************************************************### Python 在自然语言处理(NLP)中的13个应用实例(续)

14. 词云生成

词云是一种可视化工具,可以直观地展示文本中最常出现的词汇。

代码示例:


1
from&nbsp;wordcloud&nbsp;import&nbsp;WordCloud<br>import&nbsp;matplotlib.pyplot&nbsp;as&nbsp;plt<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"Natural&nbsp;language&nbsp;processing&nbsp;(NLP)&nbsp;is&nbsp;a&nbsp;subfield&nbsp;of&nbsp;linguistics,&nbsp;computer&nbsp;science,&nbsp;and&nbsp;artificial&nbsp;intelligence&nbsp;concerned&nbsp;with&nbsp;the&nbsp;interactions&nbsp;between&nbsp;computers&nbsp;and&nbsp;human&nbsp;(natural)&nbsp;languages."<br><br><em>#&nbsp;生成词云</em><br>wordcloud&nbsp;=&nbsp;WordCloud(width=800,&nbsp;height=400,&nbsp;background_color='white').generate(text)<br><br><em>#&nbsp;显示词云</em><br>plt.figure(figsize=(10,&nbsp;5))<br>plt.imshow(wordcloud,&nbsp;interpolation='bilinear')<br>plt.axis('off')<br>plt.show()

解释:

  • 使用
    1
    wordcloud

    库生成词云。

  • 设置词云的宽度、高度和背景颜色。
  • 使用
    1
    matplotlib

    显示词云图像。

15. 问答系统

问答系统用于回答用户提出的问题。

代码示例:


1
from&nbsp;transformers&nbsp;import&nbsp;pipeline<br><br><em>#&nbsp;创建问答模型</em><br>qa_pipeline&nbsp;=&nbsp;pipeline("question-answering",&nbsp;model="distilbert-base-cased-distilled-squad")<br><br><em>#&nbsp;示例问题和上下文</em><br>context&nbsp;=&nbsp;"Natural&nbsp;language&nbsp;processing&nbsp;(NLP)&nbsp;is&nbsp;a&nbsp;subfield&nbsp;of&nbsp;linguistics,&nbsp;computer&nbsp;science,&nbsp;and&nbsp;artificial&nbsp;intelligence&nbsp;concerned&nbsp;with&nbsp;the&nbsp;interactions&nbsp;between&nbsp;computers&nbsp;and&nbsp;human&nbsp;(natural)&nbsp;languages."<br>question&nbsp;=&nbsp;"What&nbsp;is&nbsp;NLP?"<br><br><em>#&nbsp;生成答案</em><br>answer&nbsp;=&nbsp;qa_pipeline(question=question,&nbsp;context=context)<br><br>print(answer&#091;'answer'])&nbsp;&nbsp;<em>#&nbsp;输出:&nbsp;Natural&nbsp;language&nbsp;processing&nbsp;(NLP)&nbsp;is&nbsp;a&nbsp;subfield&nbsp;of&nbsp;linguistics,&nbsp;computer&nbsp;science,&nbsp;and&nbsp;artificial&nbsp;intelligence&nbsp;concerned&nbsp;with&nbsp;the&nbsp;interactions&nbsp;between&nbsp;computers&nbsp;and&nbsp;human&nbsp;(natural)&nbsp;languages.</em>

解释:

  • 使用
    1
    transformers

    库创建问答模型。

  • 提供问题和上下文文本。
  • 生成答案并打印。

16. 信息抽取

信息抽取是从非结构化文本中提取有用信息的过程。

代码示例:


1
from&nbsp;transformers&nbsp;import&nbsp;pipeline<br><br><em>#&nbsp;创建信息抽取模型</em><br>ner_pipeline&nbsp;=&nbsp;pipeline("ner",&nbsp;model="dbmdz/bert-large-cuneiform-sumerian-ner")<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"Sargon&nbsp;was&nbsp;a&nbsp;king&nbsp;of&nbsp;Akkad."<br><br><em>#&nbsp;提取信息</em><br>entities&nbsp;=&nbsp;ner_pipeline(text)<br><br>print(entities)<br><em>#&nbsp;输出:</em><br><em>#&nbsp;&#091;{'entity':&nbsp;'B-PER',&nbsp;'score':&nbsp;0.9999799728393555,&nbsp;'index':&nbsp;0,&nbsp;'word':&nbsp;'Sargon',&nbsp;'start':&nbsp;0,&nbsp;'end':&nbsp;6},</em><br><em>#&nbsp;&nbsp;{'entity':&nbsp;'B-LOC',&nbsp;'score':&nbsp;0.9999675750732422,&nbsp;'index':&nbsp;5,&nbsp;'word':&nbsp;'Akkad',&nbsp;'start':&nbsp;14,&nbsp;'end':&nbsp;19}]</em>

解释:

  • 使用
    1
    transformers

    库创建信息抽取模型。

  • 提取文本中的实体及其类型。
  • 打印提取结果。

17. 关系抽取

关系抽取是从文本中识别实体之间的关系。

代码示例:


1
from&nbsp;transformers&nbsp;import&nbsp;pipeline<br><br><em>#&nbsp;创建关系抽取模型</em><br>re_pipeline&nbsp;=&nbsp;pipeline("relation-extraction",&nbsp;model="joeddav/xlm-roberta-large-xnli")<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"Sargon&nbsp;was&nbsp;a&nbsp;king&nbsp;of&nbsp;Akkad."<br><br><em>#&nbsp;定义实体对</em><br>entity_pairs&nbsp;=&nbsp;&#091;<br>&nbsp;&nbsp;&nbsp;&nbsp;{"entity":&nbsp;"Sargon",&nbsp;"offset":&nbsp;(0,&nbsp;6)},<br>&nbsp;&nbsp;&nbsp;&nbsp;{"entity":&nbsp;"king",&nbsp;"offset":&nbsp;(10,&nbsp;14)},<br>&nbsp;&nbsp;&nbsp;&nbsp;{"entity":&nbsp;"Akkad",&nbsp;"offset":&nbsp;(17,&nbsp;22)}<br>]<br><br><em>#&nbsp;提取关系</em><br>relations&nbsp;=&nbsp;re_pipeline(text,&nbsp;entity_pairs)<br><br>print(relations)<br><em>#&nbsp;输出:</em><br><em>#&nbsp;&#091;{'score':&nbsp;0.9999675750732422,&nbsp;'entity':&nbsp;'was&nbsp;a',&nbsp;'label':&nbsp;'is_a',&nbsp;'entity_pair':&nbsp;{'entity_0':&nbsp;'Sargon',&nbsp;'entity_1':&nbsp;'king'},&nbsp;'index':&nbsp;0,&nbsp;'confidence':&nbsp;0.9999675750732422}]</em>

解释:

  • 使用
    1
    transformers

    库创建关系抽取模型。

  • 定义实体对。
  • 提取实体之间的关系。
  • 打印提取结果。

18. 文本聚类

文本聚类是将相似的文档归为一类的过程。

代码示例:


1
from&nbsp;sklearn.feature_extraction.text&nbsp;import&nbsp;TfidfVectorizer<br>from&nbsp;sklearn.cluster&nbsp;import&nbsp;KMeans<br>from&nbsp;sklearn.metrics&nbsp;import&nbsp;silhouette_score<br><br><em>#&nbsp;示例文本</em><br>documents&nbsp;=&nbsp;&#091;<br>&nbsp;&nbsp;&nbsp;&nbsp;"Human&nbsp;machine&nbsp;interface&nbsp;for&nbsp;lab&nbsp;abc&nbsp;computer&nbsp;applications",<br>&nbsp;&nbsp;&nbsp;&nbsp;"A&nbsp;survey&nbsp;of&nbsp;user&nbsp;opinion&nbsp;of&nbsp;computer&nbsp;system&nbsp;response&nbsp;time",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;EPS&nbsp;user&nbsp;interface&nbsp;management&nbsp;system",<br>&nbsp;&nbsp;&nbsp;&nbsp;"System&nbsp;and&nbsp;human&nbsp;system&nbsp;engineering&nbsp;testing&nbsp;of&nbsp;EPS",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Relation&nbsp;of&nbsp;user&nbsp;perceived&nbsp;response&nbsp;time&nbsp;to&nbsp;error&nbsp;measurement",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;generation&nbsp;of&nbsp;random&nbsp;binary&nbsp;unordered&nbsp;trees",<br>&nbsp;&nbsp;&nbsp;&nbsp;"The&nbsp;intersection&nbsp;graph&nbsp;of&nbsp;paths&nbsp;in&nbsp;trees",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Graph&nbsp;minors&nbsp;IV&nbsp;Widths&nbsp;of&nbsp;trees&nbsp;and&nbsp;well&nbsp;quasi&nbsp;ordering",<br>&nbsp;&nbsp;&nbsp;&nbsp;"Graph&nbsp;minors&nbsp;A&nbsp;survey"<br>]<br><br><em>#&nbsp;TF-IDF&nbsp;向量化</em><br>vectorizer&nbsp;=&nbsp;TfidfVectorizer()<br>X&nbsp;=&nbsp;vectorizer.fit_transform(documents)<br><br><em>#&nbsp;K-Means&nbsp;聚类</em><br>kmeans&nbsp;=&nbsp;KMeans(n_clusters=2,&nbsp;random_state=42)<br>kmeans.fit(X)<br><br><em>#&nbsp;评估聚类质量</em><br>silhouette_avg&nbsp;=&nbsp;silhouette_score(X,&nbsp;kmeans.labels_)<br>print(f"Silhouette&nbsp;Score:&nbsp;{silhouette_avg:.2f}")<br><br><em>#&nbsp;打印聚类结果</em><br>for&nbsp;i,&nbsp;doc&nbsp;in&nbsp;enumerate(documents):<br>&nbsp;&nbsp;&nbsp;&nbsp;print(f"{doc}&nbsp;-&gt;&nbsp;Cluster&nbsp;{kmeans.labels_&#091;i]}")

解释:

  • 使用
    1
    TfidfVectorizer

    对文档进行 TF-IDF 向量化。

  • 使用
    1
    KMeans

    进行聚类。

  • 评估聚类质量。
  • 打印每个文档的聚类结果。

19. 事件检测

事件检测是从文本中识别特定事件的过程。

代码示例:


1
from&nbsp;transformers&nbsp;import&nbsp;pipeline<br><br><em>#&nbsp;创建事件检测模型</em><br>event_pipeline&nbsp;=&nbsp;pipeline("event-extraction",&nbsp;model="microsoft/layoutlmv2-base-uncased-finetuned-funsd")<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"The&nbsp;company&nbsp;announced&nbsp;a&nbsp;new&nbsp;product&nbsp;launch&nbsp;on&nbsp;Monday."<br><br><em>#&nbsp;事件检测</em><br>events&nbsp;=&nbsp;event_pipeline(text)<br><br>print(events)<br><em>#&nbsp;输出:</em><br><em>#&nbsp;&#091;{'event_type':&nbsp;'Product&nbsp;Launch',&nbsp;'trigger':&nbsp;'launch',&nbsp;'trigger_start':&nbsp;35,&nbsp;'trigger_end':&nbsp;40,&nbsp;'arguments':&nbsp;&#091;{'entity':&nbsp;'company',&nbsp;'entity_start':&nbsp;4,&nbsp;'entity_end':&nbsp;10,&nbsp;'role':&nbsp;'Company'},&nbsp;{'entity':&nbsp;'Monday',&nbsp;'entity_start':&nbsp;38,&nbsp;'entity_end':&nbsp;44,&nbsp;'role':&nbsp;'Date'}]}]</em>

解释:

  • 使用
    1
    transformers

    库创建事件检测模型。

  • 提取文本中的事件及其触发词和参数。
  • 打印事件检测结果。

20. 词性标注

词性标注是将文本中的每个单词标记为其对应的词性。

代码示例:


1
from&nbsp;nltk&nbsp;import&nbsp;pos_tag<br>from&nbsp;nltk.tokenize&nbsp;import&nbsp;word_tokenize<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"John&nbsp;likes&nbsp;to&nbsp;watch&nbsp;movies.&nbsp;Mary&nbsp;likes&nbsp;movies&nbsp;too."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;word_tokenize(text)<br><br><em>#&nbsp;词性标注</em><br>tagged_tokens&nbsp;=&nbsp;pos_tag(tokens)<br><br>print(tagged_tokens)<br><em>#&nbsp;输出:</em><br><em>#&nbsp;&#091;('John',&nbsp;'NNP'),&nbsp;('likes',&nbsp;'VBZ'),&nbsp;('to',&nbsp;'TO'),&nbsp;('watch',&nbsp;'VB'),&nbsp;('movies',&nbsp;'NNS'),&nbsp;('.',&nbsp;'.'),&nbsp;('Mary',&nbsp;'NNP'),&nbsp;('likes',&nbsp;'VBZ'),&nbsp;('movies',&nbsp;'NNS'),&nbsp;('too',&nbsp;'RB'),&nbsp;('.',&nbsp;'.')]</em>

解释:

  • 使用
    1
    nltk

    库进行分词。

  • 使用
    1
    pos_tag

    进行词性标注。

  • 打印标注结果。

21. 依存句法分析

依存句法分析是分析句子中词与词之间的依存关系。

代码示例:


1
import&nbsp;spacy<br><br><em>#&nbsp;加载预训练模型</em><br>nlp&nbsp;=&nbsp;spacy.load("en_core_web_sm")<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"John&nbsp;likes&nbsp;to&nbsp;watch&nbsp;movies.&nbsp;Mary&nbsp;likes&nbsp;movies&nbsp;too."<br><br><em>#&nbsp;处理文本</em><br>doc&nbsp;=&nbsp;nlp(text)<br><br><em>#&nbsp;依存句法分析</em><br>for&nbsp;token&nbsp;in&nbsp;doc:<br>&nbsp;&nbsp;&nbsp;&nbsp;print(token.text,&nbsp;token.dep_,&nbsp;token.head.text,&nbsp;token.head.pos_,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#091;child&nbsp;for&nbsp;child&nbsp;in&nbsp;token.children])<br><br><em>#&nbsp;输出:</em><br><em>#&nbsp;John&nbsp;nsubj&nbsp;likes&nbsp;VERB&nbsp;&#091;]</em><br><em>#&nbsp;likes&nbsp;ROOT&nbsp;likes&nbsp;VERB&nbsp;&#091;to]</em><br><em>#&nbsp;to&nbsp;mark&nbsp;likes&nbsp;VERB&nbsp;&#091;watch]</em><br><em>#&nbsp;watch&nbsp;xcomp&nbsp;likes&nbsp;VERB&nbsp;&#091;]</em><br><em>#&nbsp;movies&nbsp;dobj&nbsp;likes&nbsp;VERB&nbsp;&#091;]</em><br><em>#&nbsp;.&nbsp;punct&nbsp;likes&nbsp;PUNCT&nbsp;&#091;]</em><br><em>#&nbsp;Mary&nbsp;nsubj&nbsp;likes&nbsp;VERB&nbsp;&#091;]</em><br><em>#&nbsp;likes&nbsp;ROOT&nbsp;likes&nbsp;VERB&nbsp;&#091;]</em><br><em>#&nbsp;movies&nbsp;dobj&nbsp;likes&nbsp;VERB&nbsp;&#091;]</em><br><em>#&nbsp;too&nbsp;advmod&nbsp;likes&nbsp;VERB&nbsp;&#091;]</em><br><em>#&nbsp;.&nbsp;punct&nbsp;likes&nbsp;PUNCT&nbsp;&#091;]</em>

解释:

  • 使用
    1
    spacy

    库进行依存句法分析。

  • 打印每个词的依存关系及其父节点和子节点。

22. 语法树构建

语法树构建是将句子的语法结构表示为树状结构。

代码示例:


1
import&nbsp;nltk<br>from&nbsp;nltk&nbsp;import&nbsp;Tree<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"John&nbsp;likes&nbsp;to&nbsp;watch&nbsp;movies.&nbsp;Mary&nbsp;likes&nbsp;movies&nbsp;too."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;nltk.word_tokenize(text)<br><br><em>#&nbsp;词性标注</em><br>tagged_tokens&nbsp;=&nbsp;nltk.pos_tag(tokens)<br><br><em>#&nbsp;构建语法树</em><br>grammar&nbsp;=&nbsp;"NP:&nbsp;{&lt;DT&gt;?&lt;JJ&gt;*&lt;NN&gt;}"<br>cp&nbsp;=&nbsp;nltk.RegexpParser(grammar)<br>result&nbsp;=&nbsp;cp.parse(tagged_tokens)<br><br><em>#&nbsp;显示语法树</em><br>result.draw()

解释:

  • 使用
    1
    nltk

    库进行分词和词性标注。

  • 使用正则表达式构建语法树。
  • 使用
    1
    draw

    方法显示语法树。

23. 词性转换

词性转换是将一个词从一种词性转换为另一种词性。

代码示例:


1
from&nbsp;nltk.stem&nbsp;import&nbsp;WordNetLemmatizer<br>from&nbsp;nltk.corpus&nbsp;import&nbsp;wordnet<br><br><em>#&nbsp;示例文本</em><br>text&nbsp;=&nbsp;"running&nbsp;dogs&nbsp;are&nbsp;barking&nbsp;loudly."<br><br><em>#&nbsp;分词</em><br>tokens&nbsp;=&nbsp;text.split()<br><br><em>#&nbsp;词性转换</em><br>lemmatizer&nbsp;=&nbsp;WordNetLemmatizer()<br>converted_tokens&nbsp;=&nbsp;&#091;]<br><br>for&nbsp;token&nbsp;in&nbsp;tokens:<br>&nbsp;&nbsp;&nbsp;&nbsp;<em>#&nbsp;获取词性</em><br>&nbsp;&nbsp;&nbsp;&nbsp;pos&nbsp;=&nbsp;wordnet.NOUN&nbsp;if&nbsp;token.endswith('ing')&nbsp;else&nbsp;wordnet.VERB<br>&nbsp;&nbsp;&nbsp;&nbsp;converted_token&nbsp;=&nbsp;lemmatizer.lemmatize(token,&nbsp;pos=pos)<br>&nbsp;&nbsp;&nbsp;&nbsp;converted_tokens.append(converted_token)<br><br>print(converted_tokens)<br><em>#&nbsp;输出:</em><br><em>#&nbsp;&#091;'run',&nbsp;'dog',&nbsp;'are',&nbsp;'bark',&nbsp;'loudli',&nbsp;'.']</em>

解释:

  • 使用
    1
    WordNetLemmatizer

    进行词性转换。

  • 根据词尾判断词性。
  • 打印转换后的结果。

实战案例:情感分析在电商评论中的应用

假设我们正在为一家电商平台开发一个情感分析系统,用于自动分析用户评论的情感倾向。具体步骤如下:

1. 数据收集

  • 收集电商平台上的用户评论数据。

2. 数据预处理

  • 清洗文本数据,去除无关信息。
  • 分词并去除停用词。

3. 情感分析

  • 使用
    1
    SentimentIntensityAnalyzer

    进行情感分析。

  • 计算每个评论的情感得分。

4. 结果展示

  • 将分析结果可视化,展示正面、负面和中性评论的比例。

代码示例:


1
import&nbsp;pandas&nbsp;as&nbsp;pd<br>from&nbsp;nltk.sentiment&nbsp;import&nbsp;SentimentIntensityAnalyzer<br>import&nbsp;matplotlib.pyplot&nbsp;as&nbsp;plt<br><br><em>#&nbsp;加载评论数据</em><br>data&nbsp;=&nbsp;pd.read_csv('reviews.csv')<br>comments&nbsp;=&nbsp;data&#091;'comment'].tolist()<br><br><em>#&nbsp;情感分析</em><br>sia&nbsp;=&nbsp;SentimentIntensityAnalyzer()<br><br>sentiments&nbsp;=&nbsp;&#091;]<br>for&nbsp;comment&nbsp;in&nbsp;comments:<br>&nbsp;&nbsp;&nbsp;&nbsp;sentiment_scores&nbsp;=&nbsp;sia.polarity_scores(comment)<br>&nbsp;&nbsp;&nbsp;&nbsp;sentiments.append(sentiment_scores&#091;'compound'])<br><br><em>#&nbsp;计算情感类别</em><br>positive_count&nbsp;=&nbsp;sum(1&nbsp;for&nbsp;score&nbsp;in&nbsp;sentiments&nbsp;if&nbsp;score&nbsp;&gt;&nbsp;0)<br>negative_count&nbsp;=&nbsp;sum(1&nbsp;for&nbsp;score&nbsp;in&nbsp;sentiments&nbsp;if&nbsp;score&nbsp;&lt;&nbsp;0)<br>neutral_count&nbsp;=&nbsp;sum(1&nbsp;for&nbsp;score&nbsp;in&nbsp;sentiments&nbsp;if&nbsp;score&nbsp;==&nbsp;0)<br><br><em>#&nbsp;可视化结果</em><br>labels&nbsp;=&nbsp;&#091;'Positive',&nbsp;'Negative',&nbsp;'Neutral']<br>sizes&nbsp;=&nbsp;&#091;positive_count,&nbsp;negative_count,&nbsp;neutral_count]<br><br>plt.figure(figsize=(8,&nbsp;8))<br>plt.pie(sizes,&nbsp;labels=labels,&nbsp;autopct='%1.1f%%',&nbsp;startangle=140)<br>plt.title('Sentiment&nbsp;Analysis&nbsp;of&nbsp;Product&nbsp;Reviews')<br>plt.show()

解释:

  • 使用
    1
    pandas

    库加载评论数据。

  • 使用
    1
    SentimentIntensityAnalyzer

    计算每个评论的情感得分。

  • 统计正面、负面和中性评论的数量。
  • 使用
    1
    matplotlib

    绘制饼图展示结果。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

安全运维之道:发现、解决问题的有效闭环

2024-4-14 20:59:36

安全运维

稳定性建设 – 架构优化的关键策略

2025-2-11 17:15:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索