Python 物联网入门指南(二)(2)https://developer.aliyun.com/article/1507137
使用主题建模在文本中识别模式
主题建模是指识别手稿信息中隐藏模式的过程。其目标是在一系列文件中揭示一些隐藏的主题结构。
如何做…
- 导入以下包:
from nltk.tokenize import RegexpTokenizer from nltk.stem.snowball import SnowballStemmer from gensim import models, corpora from nltk.corpus import stopwords
- 加载输入数据:
def load_words(in_file): element = [] with open(in_file, 'r') as f: for line in f.readlines(): element.append(line[:-1]) return element
- 预处理文本的类:
classPreprocedure(object): def __init__(self): # Create a regular expression tokenizer self.tokenizer = RegexpTokenizer(r'w+')
- 获取停用词列表以终止程序执行:
self.english_stop_words= stopwords.words('english')
- 创建一个 Snowball 词干提取器:
self.snowball_stemmer = SnowballStemmer('english')
- 定义一个执行标记化、停用词去除和词干处理的函数:
def procedure(self, in_data): # Tokenize the string token = self.tokenizer.tokenize(in_data.lower())
- 从文本中消除停用词:
tokenized_stopwords = [x for x in token if not x in self.english_stop_words]
- 对标记进行词干处理:
token_stemming = [self.snowball_stemmer.stem(x) for x in tokenized_stopwords]
- 返回处理过的标记:
return token_stemming
- 从
main
函数加载输入数据:
if __name__=='__main__': # File containing input data in_file = 'data_topic_modeling.txt' # Load words element = load_words(in_file)
- 创建一个对象:
preprocedure = Preprocedure()
- 处理文件并提取标记:
processed_tokens = [preprocedure.procedure(x) for x in element]
- 根据标记化的文档创建一个字典:
dict_tokens = corpora.Dictionary(processed_tokens) corpus = [dict_tokens.doc2bow(text) for text in processed_tokens]
- 开发一个 LDA 模型,定义所需的参数,并初始化 LDA 目标:
num_of_topics = 2 num_of_words = 4 ldamodel = models.ldamodel.LdaModel(corpus,num_topics=num_of_topics, id2word=dict_tokens, passes=25) print "Most contributing words to the topics:" for item in ldamodel.print_topics(num_topics=num_of_topics, num_words=num_of_words): print "nTopic", item[0], "==>", item[1]
- 执行
topic_modelling.py
时获得的结果如下截图所示:
情感分析的应用
情感分析在社交媒体如 Facebook 和 Twitter 中使用,以找出公众对某个问题的情感(积极/消极)。它们还用于确定人们对广告的情感以及人们对您的产品、品牌或服务的感受。
第五章:在图像中检测边缘和轮廓
本章介绍以下主题:
- 加载、显示和保存图像
- 图像翻转和缩放
- 腐蚀和膨胀
- 图像分割
- 模糊和锐化图像
- 在图像中检测边缘
- 直方图均衡化
- 在图像中检测角点
介绍
图像处理在几乎所有工程和医学应用中都起着至关重要的作用,用于从灰度/彩色图像中提取和评估感兴趣区域。图像处理方法包括预处理、特征提取和分类。预处理用于增强图像的质量;这包括自适应阈值处理、对比度增强、直方图均衡化和边缘检测。特征提取技术用于从图像中提取显著特征,以供后续分类使用。
本章介绍了构建图像预处理方案的程序。
加载、显示和保存图像
本节介绍了如何通过 OpenCV-Python 处理图像。此外,我们讨论了如何加载、显示和保存图像。
如何做…
- 导入计算机视觉包-
cv2
:
import cv2
- 使用内置的
imread
函数读取图像:
image = cv2.imread('image_1.jpg')
- 使用内置的
imshow
函数显示原始图像:
cv2.imshow("Original", image)
- 等待按下任意键:
cv2.waitKey(0)
- 使用内置的
imwrite
函数保存图像:
cv2.imwrite("Saved Image.jpg", image)
- 用于执行 Python 程序
Load_Display_Save.py
的命令如下所示:
- 执行
Load_Display_Save.py
后获得的结果如下所示:
图像翻转
在图像翻转操作中,我们可以水平、垂直、水平和垂直翻转输入图像。
如何做…
- 导入计算机视觉包-
cv2
:
import cv2
- 使用内置的
imread
函数读取图像:
image = cv2.imread('image_2.jpg')
- 使用内置的
imshow
函数显示原始图像:
cv2.imshow("Original", image)
- 等待按下任意键:
cv2.waitKey(0)
- 对测试图像执行所需操作:
# cv2.flip is used to flip images # Horizontal flipping of images using value '1' flipping = cv2.flip(image, 1)
- 显示水平翻转的图像:
# Display horizontally flipped image cv2.imshow("Horizontal Flipping", flipping)
- 等待按下任意键:
cv2.waitKey(0)
- 执行输入图像的垂直翻转:
# Vertical flipping of images using value '0' flipping = cv2.flip(image, 0)
- 显示垂直翻转的图像:
cv2.imshow("Vertical Flipping", flipping)
- 等待按下任意键:
cv2.waitKey(0)
- 显示处理后的图像:
# Horizontal & Vertical flipping of images using value '-1' flipping = cv2.flip(image, -1) # Display horizontally & vertically flipped image cv2.imshow("Horizontal & Vertical Flipping", flipping) # Wait until any key is pressed cv2.waitKey(0)
- 停止执行并显示结果:
# Close all windows cv2.destroyAllWindows()
- 用于执行
Flipping.py
Python 程序的命令如下所示:
- 执行
Flipping.py
后获得的原始和水平翻转的图像如下所示:
以下是水平翻转的图片:
- 执行
Flipping.py
后获得的垂直、水平和垂直翻转的图像如下所示:
以下是水平和垂直翻转的图片:
图像缩放
图像缩放用于根据要求修改输入图像的尺寸。在 OpenCV 中通常使用三种类型的缩放操作符,它们是立方、区域和线性插值。
如何做…
- 创建一个新的 Python 文件并导入以下包:
# Scaling (Resizing) Images - Cubic, Area, Linear Interpolations # Interpolation is a method of estimating values between known data points # Import Computer Vision package - cv2 import cv2 # Import Numerical Python package - numpy as np import numpy as np
- 使用内置的
imread
函数读取图像:
image = cv2.imread('image_3.jpg')
- 使用内置的
imshow
函数显示原始图像:
cv2.imshow("Original", image)
- 等待按下任意键:
cv2.waitKey()
- 根据操作员的命令调整图像大小:
# cv2.resize(image, output image size, x scale, y scale, interpolation)
- 使用立方插值调整图像大小:
# Scaling using cubic interpolation scaling_cubic = cv2.resize(image, None, fx=.75, fy=.75, interpolation = cv2.INTER_CUBIC)
- 显示输出图像:
# Display cubic interpolated image cv2.imshow('Cubic Interpolated', scaling_cubic)
- 等待按下任意键:
cv2.waitKey()
- 使用区域插值调整图像大小:
# Scaling using area interpolation scaling_skewed = cv2.resize(image, (600, 300), interpolation = cv2.INTER_AREA)
- 显示输出图像:
# Display area interpolated image cv2.imshow('Area Interpolated', scaling_skewed)
- 等待操作员的指示:
# Wait until any key is pressed cv2.waitKey()
- 使用线性插值调整图像大小:
# Scaling using linear interpolation scaling_linear = cv2.resize(image, None, fx=0.5, fy=0.5, interpolation = cv2.INTER_LINEAR)
- 显示输出图像:
# Display linear interpolated image cv2.imshow('Linear Interpolated', scaling_linear)
- 等待按下任意键:
cv2.waitKey()
- 完成图像缩放任务后,终止程序执行:
# Close all windows cv2.destroyAllWindows()
- 用于执行
Scaling.py
Python 程序的命令如下所示:
- 用于缩放的原始图像如下所示:
- 执行
Scaling.py
文件后获得的线性插值输出如下所示:
- 执行
Scaling.py
文件后获得的面积插值输出如下所示:
- 执行
Scaling.py
文件后获得的立方插值输出如下所示:
腐蚀和膨胀
腐蚀和膨胀是形态学操作。腐蚀去除图像中对象边界的像素,而膨胀在图像中对象的边界上添加像素。
如何做…
- 导入计算机视觉包 -
cv2
:
import cv2
- 导入数值 Python 包 -
numpy as np
:
import numpy as np
- 使用内置的
imread
函数读取图像:
image = cv2.imread('image_4.jpg')
- 使用内置的
imshow
函数显示原始图像:
cv2.imshow("Original", image)
- 等待按任意键:
cv2.waitKey(0)
- 给定形状和类型,用 1 填充:
# np.ones(shape, dtype) # 5 x 5 is the dimension of the kernel, uint8: is an unsigned integer (0 to 255) kernel = np.ones((5,5), dtype = "uint8")
cv2.erode
是用于腐蚀的内置函数:
# cv2.erode(image, kernel, iterations) erosion = cv2.erode(image, kernel, iterations = 1)
- 使用内置的
imshow
函数显示腐蚀后的图像:
cv2.imshow("Erosion", erosion)
- 等待按任意键:
cv2.waitKey(0)
cv2.dilate
是用于膨胀的内置函数:
# cv2.dilate(image, kernel, iterations) dilation = cv2.dilate(image, kernel, iterations = 1)
- 使用内置的
imshow
函数显示膨胀后的图像:
cv2.imshow("Dilation", dilation)
- 等待按任意键:
cv2.waitKey(0)
- 关闭所有窗口:
cv2.destroyAllWindows()
- 用于执行
Erosion_Dilation.py
文件的命令如下所示:
- 用于执行
Erosion_Dilation.py
文件的输入图像如下所示:
- 执行
Erosion_Dilation.py
文件后获得的腐蚀图像如下所示:
- 执行
Erosion_Dilation.py
文件后获得的膨胀图像如下所示:
Python 物联网入门指南(二)(4)https://developer.aliyun.com/article/1507163