精华内容
下载资源
问答
  • word提取文字所需jar

    2018-08-23 16:17:09
    word提取文字所需的一系列jar,word提取文字所需的一系列jar
  • java开发过程word文档文字提取所需要的jar包,可以提取word中文字,以及可以调用其他相关的poi,对应的api可以去相应官网学习和查询。
  • 笔者最近做一个数据库项目,其中需要从EXCEL中提取关键字段。提取内容如下图示,需要将图加粗部分单独提出后进行去噪处理。如果通过word处理,文字量小的时候尚可实现,但几十万字的处理量很容易就造成假死。...

    笔者最近在做一个数据库项目,其中需要从EXCEL中提取关键字段。提取内容如下图所示,需要将图中加粗部分单独提出后进行去噪处理。如果通过word处理,文字量小的时候尚可实现,但几十万字的处理量很容易就造成假死。因此采用了EXCEL进行数据处理。
    在这里插入图片描述

    代码如下:功能是将B列中的数据筛选后存入C列

    Sub 提取内容()
    Dim searchtext
    Dim textlong
    Dim str_start
    Dim str_end
    
    For i = 1 To 2000
    searchtext = Worksheets("sheet1").Range("B" & i).Value
    textlong = Len(Worksheets("sheet1").Range("B" & i).Value)
    '————————————————————————————确定提取的字符区间
        If InStr(searchtext, "解决") <> 0 Then
        str_start = InStr(searchtext, "解决")
        str_end = InStr(searchtext, "问题")
     '————————————————————————————避免B列出现不含有所要提取内容时报错
    If str_start - str_end - 2 > 0 Then
    Worksheets("B60J7摘要").Range("c" & i).Value = Mid(searchtext, str_start + 2, str_start - str_end - 2)
    End If
     '————————————————————————————提取B列中的内容至C列
        ElseIf InStr(searchtext, "问题") <> 0 Then
        Worksheets("sheet1").Range("c" & i).Value = Right(searchtext, str_start + 2, str_start - str_end - 2)
        ElseIf searchtext = "" Then
        Worksheets("sheet1").Range("c" & i).Value = ""
        Else
        Worksheets("sheet1").Range("c" & i).Value = "不含有"
        End If
     Next
    End Sub
    

    注:由于要提取的内容中,必然以“解决”开头,以“问题”结尾,因此可采用上述代码处理。提取结果如图所示。

    展开全文
  • 导读:本文的目标是介绍一些Python库,帮助你从类似于PDF和Word DOCX 这样的二进制文件中提取数据。我们也将了解和学习如何从网络信息源(web feeds)(如RSS)获取数据,以及利用一个库帮助解析HTML文本并从文档...

    640?wx_fmt=gif

    导读:本文的目标是介绍一些Python库,帮助你从类似于PDF和Word DOCX 这样的二进制文件中提取数据。我们也将了解和学习如何从网络信息源(web feeds)(如RSS)中获取数据,以及利用一个库帮助解析HTML文本并从文档中提取原始文本。

     

    我们还将学习如何从不同来源提取原始文本,对其进行规范化,并基于它创建一个用户定义的语料库。

     

    在本文中,你将学习7个不同的实例。我们将学习从PDF文件、Word文档和Web中获取数据。PDF和Word文档是二进制文件,通过Web,你将获得HTML格式的数据,因此,我们也会对数据执行规范化和原始文本转换任务。

     

    作者:克里希纳·巴夫萨、纳雷什·库马尔、普拉塔普·丹蒂

    如需转载请联系大数据(ID:hzdashuju)

     

    640?wx_fmt=jpeg

     

     

    01 字符串操作的重要性

     

    作为一名NLP专家,你将要处理大量的文本内容。当你在处理文本时,你必须知道一些字符串操作。我们将从几个简短的范例入手,帮助你理解str类及其在Python中的相关操作。

     

    1. 准备工作

     

    这里,你仅仅需要Python解释器和一个文本编辑器。我们将使用join(连接)、split(分割)、addition(加法)和multiplication(乘法)运算符以及索引。

     

    2. 如何实现

     

    (1)创建一个新的Python文件,命名为StringOps1.py。

     

    (2)定义以下两个对象:

     

    namesList = ['Tuffy','Ali','Nysha','Tim' ]
    sentence = 'My dog sleeps on sofa'
    

     

    第一个对象nameList是一个包含若干名字的字符串列表,第二个对象sentence是一个包含一句话的字符串对象。

     

    (3)首先,我们看看join函数的特点以及它的功能:

     

    names = ';'.join(namesList)
    print(type(names), ':', names)
    

     

    join()函数可以被任意一个string对象调用,它的输入参数是一个str对象的列表。通过将调用字符串的内容作为连接分隔符,它将所有str对象连接成一个str对象,并返回连接后的对象。运行这两行代码后,你得到的输出如下:

     

    <class 'str'> : Tuffy;Ali;Nysha;Tim
    

     

    (4)接下来,我们来看split方法的功能:

     

    wordList = sentence.split(' ')
    print((type(wordList)), ':', wordList)
    

     

    当split函数调用一个字符串时,它会将其内容分割为多个str对象,创建一个包含这些字符串对象的列表,并返回该列表。该函数接受单个str对象作为参数,表示分隔符。运行代码,得到如下输出:

     

    <class 'list'> : ['My', 'dog', 'sleeps', 'on', 'sofa']
    

     

    (5)算术运算符+和*也可以用于字符串。添加以下代码并输出:

     

    additionExample = 'ganehsa' + 'ganesha' + 'ganesha'
    multiplicationExample = 'ganesha' * 2
    print('Text Additions :', additionExample)
    print('Text Multiplication :', multiplicationExample)
    

     

    我们首先看一下输出结果,随后讨论其工作原理:

     

    Text Additions: ganehsaganeshaganesha
    Text Multiplication: ganeshaganesha
    

     

    +运算符被称为连接符,它将字符串连接为单个str对象,产生一个新的字符串。如前所述,我们也可以使用*运算符对字符串做乘法。此外,需要注意的是这些操作不会添加任何额外的内容,例如在字符串之间插入空格。

     

    (6)接下来,我们来了解一下字符串中的字符索引。添加下列几行代码:

     

    str = 'Python NLTK'
    print(str[1])
    print(str[-3])
    

     

    首先,我们声明一个新的 string 对象。然后可以直接访问字符串中的第二个字符(y)。这里还有个小技巧:Python允许你在访问任何列表对象时使用负索引,比如说-1意味着最后一个成员,-2是倒数第二个成员,依此类推。例如,在前面代码的str对象中,索引7和-4是相同的字符N:

     

    Output: <class 'str'> : Tuffy;Ali;Nysha;Tim
    <class 'list'> : ['My''dog''sleeps''on''sofa']
    Text Additions : ganehsaganeshaganesha
    Text Multiplication : ganeshaganesha
    y L
    

     

    3. 工作原理

     

    我们使用split()函数将一个字符串变成了一个字符串列表,并使用join()函数将一个字符串列表变成了一个字符串。接下来我们了解了有关字符串的一些算术运算符的用法。

     

    需要注意的是,我们不能在字符串中使用“-”(负号)和“/”(除法)运算符。最后,我们了解了如何在任一字符串中访问单个字符,特别值得一提的是,我们可以在访问字符串时使用负索引。

     

    本段实例非常简单和直观,主要是介绍Python允许的一些常见和不常见的字符串操作。接下来,我们将在以上操作基础上继续学习一些字符串操作。

     

     

    02 深入实践字符串操作

     

    接下来,我们将了解子字符串、字符串替换以及如何访问一个字符串的所有字符。

     

    1. 如何实现

     

    (1)创建一个新的Python文件,命名为StringOps2.py并定义以下string对象:

     

    str = 'NLTK Dolly Python'
    

     

    (2)访问str对象中以第四个字符作为结束的子串。

     

    print('Substring ends at:',str[:4])
    

     

    我们知道索引从零开始,因此将返回由第0个到第3个字符组成的子串。运行代码,输出如下:

     

    Substring ends at: NLTK
    

     

    (3)访问str对象中从某个点开始直到末尾的子串:

     

    print('Substring starts from:',str[11:] )
    

     

    以上代码指示解释器返回str对象中从索引11到结束的一个子串。运行代码,得到以下输出:

     

    Substring starts from: Python
    

     

    (4)从str对象中访问包含Dolly的子串。添加以下行:

     

    print('Substring :',str[5:10])
    

     

    以上代码返回从索引5到10的字符,不包括第10个字符。输出是:

     

    Substring : Dolly
    

     

    (5)我们在前一段中已经了解了负索引在字符串操作中的应用。现在我们试试看它在获取子串中的作用:

     

    print('Substring fancy:', str[-12:-7])
    Run and check the output, it will be –
    Substring fancy: Dolly
    

     

    这里得到的输出与上一步完全相同!为了理解这个结果,我们做一些计算:-1表示最后一个字符,-2是倒数第二个字符,依此类推。你将会发现[5:10]和[-12:-7]在这个例子中得出的子串是相同的。

     

    (6)了解in操作符在if语句中的用法:

     

    if 'NLTK' in str:
     print('found NLTK')
    

     

    运行以上代码,程序的输出如下所示:

     

    found NLTK
    

     

    如上所示,in操作符会检查左边的字符串是否属于右边字符串的子串。

     

    (7)了解str对象中replace函数的使用:

     

    replaced = str.replace('Dolly''Dorothy')
    print('Replaced String:', replaced)
    

     

    replace函数只需要两个参数。第一个是需要被替换的子字符串,第二个是用来替换前面子字符串的新子字符串。replace函数返回一个新的string对象,并且它不会修改调用它的字符串,运行代码,有如下输出:

     

    Replaced String: NLTK Dorothy Python
    

     

    (8)最后,迭代上面得到的replaced对象并访问它的每一个字符:

     

    print('Accessing each character:')
    for s in replaced:
      print(s)
    

     

    以上操作每次在新的一行输出replaced对象的每个字符,最终输出如下:

     

    Output: Substring ends at: NLTK
    Substring starts from: Python
    Substring : Dolly
    Substring fancy: Dolly
    found NLTK
    Replaced String: NLTK Dorothy Python
    Accessing each character:
    N
    L 
    T 
    K 
    D 
    o 
    r 
    o 
    t 
    h 
    y 
    P 
    y 
    t 
    h
    o 
    n
    

     

    2. 工作原理

     

    字符串对象只是一个字符列表。正如第一步所示,我们可以像访问一个列表那样用for语句来访问字符串中的每个字符。任何列表的方括号内的字符“:”表示我们想要的一个子列表。

     

    方括号内,如果字符“:”之后是一个数字n,表示我们希望获得一个从列表索引0开始到索引n-1结束的子列表。同样地,一个数字m后跟着字符“:”,则表示我们想要一个从列表索引m开始到列表末尾的子列表。

     

     

    03 在Python中读取PDF文件

     

    这个实例是从Python中访问PDF文件。首先,你需要安装PyPDF2库。

     

    1. 准备工作

     

    假设你已经安装了pip。然后,在Python2或Python3版本上用pip安装PyPDF2库,你只需要在命令行中运行以下命令:

     

    pip install pypdf2
    

     

    如果你成功安装了PyPDF2库,就完成了准备工作。与此同时,你需要通过以下链接下载一些我们将在本段用到的测试文档:

     

    https://www.dropbox.com/sh/bk18dizhsu1p534/AABEuJw4TArUbzJf4Aa8gp5Wa?dl=0

     

    2. 如何实现

     

    (1)创建一个新的Python文件,命名为pdf.py并添加以下代码:

     

    from PyPDF2 import PdfFileReader
    

     

    这行代码会导入PyPDF2库中的PdfFileReader类。

     

    (2)在上面创建的文件中添加如下Python函数,它的功能是读取一个PDF文件并返回其全文:

     

    def getTextPDF(pdfFileName, password = '')
    

     

    该函数需要两个参数,一个是你要读取的PDF文件路径,一个是这个PDF文件的密码(如果有的话)。可见,password 参数是可选的。

     

    (3)现在我们来定义这个函数。在该函数下添加如下代码:

     

    pdf_file = open(pdfFileName, 'rb')
    read_pdf = PdfFileReader(pdf_file)
    

     

     

    第一行代码会以读取和反向查找模式打开文件。第一行本质是一个Python文件打开命令/函数,仅能打开非文本的二进制文件。第二行将打开的文件传递给PdfFileReader类,用于处理PDF文档。

     

    (4)如果文件设置了密码保护,接下来是解密被密码保护的PDF文件:

     

    if password != '':
    read_pdf.decrypt(password)
    

     

    如果在函数调用时设置了密码,那么我们在解密这个文件时也同样需要密码。

     

    (5)从PDF文件中读取文本:

     

    text = []
    for i in range(0,read_pdf.getNumPages()-1):
    text.append(read_pdf.getPage(i).extractText())
    

     

    创建一个字符串列表,并将每一页的文本都添加到这个列表中。

     

    (6)返回最终的输出结果:

     

    return '\n'.join(text)
    

     

    将列表中所有的字符串都连接起来,并且在每个字符串之间都加一个换行符,返回连接后的单一字符串。

     

    (7)在pdf.py目录下创建另一个名为TestPDFs.py 的文件,添加以下导入语句:

     

    import pdf
    

     

    (8)现在我们打印输出两个文档中的文本,其中一个是受密码保护的,一个是未加密的:

     

    pdfFile = 'sample-one-line.pdf'
    pdfFileEncrypted = 'sample-one-line.protected.pdf'
    print('PDF 1: \n',pdf.getTextPDF(pdfFile))
    print('PDF 2: \n',pdf.getTextPDF(pdfFileEncrypted,'tuffy'))
    

     

    输出:本实例的前六步只是创建了一个Python函数,并不向控制台输出内容,第七和第八步会输出以下内容:

     

    This is a sample PDF document I am using to demonstrate in the
    tutorial.
    This is a sample PDF document
    password protected.
    

     

    3. 工作原理

     

    PyPDF2是用于提取PDF文件内容的一个纯Python库。该库有很多功能,可用于裁剪页面、叠加图像数字签名、创建新的PDF文件等。但是,对NLP工程师需要实现的文本分析任务来说,该库只用来读取内容。

     

    在第二步中,以反向查找模式打开文件很重要,因为当加载文件内容时,PyPDF2模块试图从尾部开始读取文件内容。此外,如果PDF文件是受密码保护的,而你没有在访问文件前解密文件,Python解释器将抛出一个PdfReadError错误。

     

     

    04 在Python中读取Word文件

     

    这里,我们将学习如何加载和读取Word/DOCX文档。用于读取Word/DOCX文件的相关库会更加全面,在这些库中我们还可以处理段落边界、文本样式以及对所谓的run对象的操作。我们将会了解以上提到的所有内容,因为这些内容在文本分析任务中是至关重要的。

     

    Tip: 如果你没有安装Microsoft Word软件,你可以使用Liber Office和Open Office软件的开源版本来创建和编辑“.docx”文件。

     

    1. 准备工作

     

    假设你已经在你的机器上安装了pip,我们将使用pip来安装python-docx库。不要将它与另一个名为docx的库混淆,这是两个完全不同的库。我们将从python docx库中导入docx对象。在命令行中执行下面的命令将安装这个库:

     

    pip install python-docx
    

     

    成功安装了该库后,继续下一步,我们将在这个实例中使用一个测试文档,如果你已经通过本文第一段提供的链接下载了所有文档,你应该已具备相关文档。如果没有,请从以下链接下载sample-one-line.docx文档。

     

    https://www.dropbox.com/sh/bk18dizhsu1p534/AABEuJw4TArUbzJf4Aa8gp5Wa?dl=0

     

    现在,准备工作就全部完成了。

     

    2. 如何实现

     

    (1)创建一个新的Python文件,命名为word.py并添加以下导入代码:

     

    import docx
    

     

    这里只需导入python-docx模块的docx对象。

     

    (2)定义getTextWord函数:

     

    def getTextWord(wordFileName):
    

     

    该函数需要一个字符串参数wordFileName,包含你要读取的Word文件的绝对路径。

     

    (3)初始化doc 对象:

     

    doc = docx.Document(wordFileName)
    

     

    此时doc对象加载了你要读取的Word文件。

     

    (4)接下来我们要从已经加载文档的doc对象中读取文本,添加以下代码来实现:

     

    fullText = []
    for para in doc.paragraphs:
      fullText.append(para.text)
    

     

    首先初始化一个字符串列表fullText,然后采用for循环逐段从文档中读取文本,并把每段都放到fullText列表中去。

     

    (5)然后,我们将所有的片段/段落连接为一个字符串对象,并将其作为函数的输出结果返回:

     

    return '\n'.join(fullText)
    

     

    通过以上操作,我们将fullText数组的所有元素用“\ n”分隔符连接起来,并返回连接后的对象。最后保存该Python文件并退出。

     

    (6)创建另一个Python文件,命名为TestDocX.py,并添加以下导入声明:

     

    import docx
    import word
    

     

    这里只需导入docx库以及我们在前五步中实现的word.py文件。

     

    (7)现在我们将要读取一个DOCX文件并使用我们在word.py中实现的API打印输出它的全部内容。添加以下两行代码:

     

    docName = 'sample-one-line.docx'
    print('Document in full :\n',word.getTextWord(docName))
    

     

    首先在第一行代码中初始化文档的路径,然后使用API打印输出文档的全部内容。当你运行这部分代码时,得到以下输出:

     

    Document in full :
    

     

    这是一个带有一些粗体文本、一些斜体文本和一些下划线文本的PDF示例文档。我们还嵌入了一个标题,如下所示:

     

    This is my TITLE.
    This is my third paragraph.
    

     

    (8)正如前面提到的,Word / DOCX文档是一个更加丰富的信息来源,除了提供文本内容外,还能提供很多信息。现在我们来看有关段落的信息。添加以下四行代码:

     

    doc = docx.Document(docName)
    print('Number of paragraphs :',len(doc.paragraphs))
    print('Paragraph 2:',doc.paragraphs[1].text)
    print('Paragraph 2 style:',doc.paragraphs[1].style)

     

    以上代码的第二行打印出了给定文档中段落的数量。第三行打印出了文档中第二段的内容。而第四行将会打印出第二段的样式,比如在这个例子中的样式就是Title类型。当你运行以上代码后,输出将如下所示:

     

    Number of paragraphs : 3
    Paragraph 2: This is my TITLE.
    Paragraph 2 style: _ParagraphStyle('Title') id: 4374023248
    

     

    (9)接下来,我们将了解什么是run对象。添加以下代码:

     

    print('Paragraph 1:',doc.paragraphs[0].text)
    print('Number of runs in paragraph 1:',len(doc.paragraphs[0].runs))
    for idx, run in enumerate(doc.paragraphs[0].runs):
      print('Run %s : %s' %(idx,run.text))
    

     

    首先,我们获得文档第一段的全部内容。然后,我们获得第一段中run对象的数目。最后,我们把每个run对象打印输出。

     

    (10)为了明确每个run对象的格式,添加以下代码:

     

    print('is Run 0 underlined:',doc.paragraphs[0].runs[5].underline)
    print('is Run 2 bold:',doc.paragraphs[0].runs[1].bold)
    print('is Run 7 italic:',doc.paragraphs[0].runs[3].italic)
    

     

    这段代码的各行分别在检查相应run对象的下划线样式、粗体样式以及斜体样式。最终输出如下:

     

    Output: Document in full :
    This is a sample PDF document with some text in BOLD, some in
    ITALIC and some underlined. We are also embedding a Title down
    below.
    This is my TITLE.
    This is my third paragraph.
    Number of paragraphs : 3
    Paragraph 2: This is my TITLE.
    Paragraph 2 style: _ParagraphStyle('Title') id: 4374023248
    Paragraph 1: This is a sample PDF document with some text in BOLD,
    some in ITALIC and some underlined. We're also embedding a Title
    down below.
    Number of runs in paragraph 1: 8
    Run 0 : This is a sample PDF document with
    Run 1 : some text in BOLD
    Run 2 : ,
    Run 3 : some in ITALIC
    Run 4 : and
    Run 5 : some underlined.
    Run 6 : We are also embedding a Title down below
    Run 7 : .
    is Run 0 underlined: True
    is Run 2 bold: True
    is Run 7 italic: True

     

    3. 工作原理

     

    首先,我们在word.py文件中写了一个函数,它将读取给定的DOCX文件并返回一个包含文件全部内容的字符串对象。前面的输出内容大都是不需要解释的,我特别阐述了关于Paragraph和Run的输出内容。DOCX文件的结构可以用python-docx库的三个数据类型来表示,其中最高一级是Document对象。

     

    每个文档都包含多个段落。文档中出现新的一行或一个回车,就表示开始一个新的段落。每个段落用多个Run对象表示段落内格式的变化,这里的格式包含有字体、尺寸、颜色和其他样式元素(如粗体、斜体、下划线等等)。这些元素每次发生变化时,都会创建一个新的Run对象。

     

     

    05 使用PDF、DOCX和纯文本文件,创建用户自定义的语料库

     

    现在我们要创建自己的语料库,而不是使用从互联网上得到的语料库。

     

    1. 准备工作

     

    在准备方面,我们将使用本文第一个实例中提到的Dropbox文件夹中的几个文件。如果你已经从那个文件夹中下载了全部的文件,那么你已经完成了准备工作。否则,请从

     

    https://www.dropbox.com/sh/bk18dizhsu1p534/AABEuJw4TArUbzJf4Aa8gp5Wa?dl=0

     

    下载如下文件:

     

    • sample_feed.txt

    • sample-pdf.pdf

    • sample-one-line.docx

     

    如果你没有按照本文的顺序来完成实例,那么你需要先回头看看本文的前两个实例。我们将用到本文前两个实例中完成的两个模块 word.py和pdf.py。本段实例更多是关于本文前两个实例所做工作的应用以及语料库概念的应用。下面我们来看实际的代码。

     

    2. 如何实现

     

    (1)创建一个新的Python文件,命名为createCorpus.py并添加以下代码:

     

    import os
    import word, pdf
    from nltk.corpus.reader.plaintext import PlaintextCorpusReader
    

     

    我们导入os库用于与文件有关的操作,word库和pdf库是本文前两段完成的库,最后导入的PlaintextCorpusReader是为了完成语料库建立这一最终目标。

     

    (2)编写一个简单的函数,用来打开并读取一个纯文本文件,并将其全部内容作为string对象返回。添加以下代码:

     

    def getText(txtFileName):
      file = open(txtFileName, 'r')
      return file.read()
    

     

    第一行代码定义了函数及其输入参数。第二行代码以只读方式打开文件(open函数的第二个参数r表示以只读方式打开)。第三行代码读取打开文件的内容并将其作为string对象返回。

     

    (3)在磁盘或文件系统中创建一个新文件夹corpus。添加以下三行代码:

     

    newCorpusDir = 'mycorpus/'
    if not os.path.isdir(newCorpusDir):
        os.mkdir(newCorpusDir)
    

     

    第一行定义的string对象包含了新文件夹名,第二行检查该文件夹在磁盘或文件系统中是否存在,第三行则通过执行os.mkdir()函数在磁盘上创建一个给定名字的文件夹。以上代码执行后将在你的Python文件所在的工作目录下创建一个名为mycorpus的新文件夹。

     

    (4)然后,逐个读取前面提到的三个文件。首先从纯文本文件开始,添加以下代码:

     

    txt1 = getText('sample_feed.txt')
    

     

    调用之前完成的getText函数,它将读取Sample_feed.txt文件并将输出结果存入名为txt1的字符串对象中。

     

    (5)现在,添加以下代码来读取PDF文件:

     

    txt2 = pdf.getTextPDF('sample-pdf.pdf')
    

     

    这里使用了PDF.py模块的getTextPDF()函数,它将读取sample-pdf.pdf文件并将文件内容存入名为txt2的字符串对象中。

     

    (6)最后,通过以下代码读取DOCX文件:

     

    txt3 = word.getTextWord('sample-one-line.docx')
    

     

    这里使用了word.py模块的getTexWord()函数,它将读取sample-one-line.docx文件并将文件内容存入名为txt3的字符串对象中。

     

    (7)接下来,将上面读到的三个字符串对象写到磁盘文件中。添加以下代码:

     

    files = [txt1,txt2,txt3]
    for idx, f in enumerate(files):
        with open(newCorpusDir+str(idx)+'.txt''w'as fout:
            fout.write(f)
    

     

    • 第一行:创建一个包含以上三个字符串对象的数组

    • 第二行:使用for循环来遍历files数组

    • 第三行:以只写模式打开一个新文件(采用w选项调用open函数)

    • 第四行:将当前字符串内容写到文件中

     

    (8)在mycorpus目录下,也就是我们之前存放文件的目录下新建一个PlainTextCorpus对象:

     

    newCorpus = PlaintextCorpusReader(newCorpusDir, '.*')
    

     

    以上一行代码看似简单,但是它在内部做了很多的文本处理,如识别段落、句子、单词等等。该函数的两个参数分别是语料库目录的路径以及要处理的文件名模式(这里我们已经设置corpus reader可以处理该目录下所有的文件)。通过以上步骤,我们创建了一个用户自定义的语料库。

     

    (9)接下来,我们来看PlainTextCorpusReader是否加载正常。添加以下代码来进行测试:

     

    print(newCorpus.words())
    print(newCorpus.sents(newCorpus.fileids()[1]))
    print(newCorpus.paras(newCorpus.fileids()[0]))
    

     

    第一行代码将打印输出语料库包含的所有单词数组(部分)。第二行代码将打印输出文件1.txt中的句子。第三行代码将打印输出文件0.txt中的段落:

     

    Output: ['Five', 'months', '.', 'That', "'", 's', 'how', ...]
    [['A', 'generic', 'NLP'], ['(', 'Natural', 'Language',
    'Processing', ')', 'toolset'], ...]
    [[['Five', 'months', '.']], [['That', "'", 's', 'how', 'long',
    'it', "'", 's', 'been', 'since', 'Mass', 'Effect', ':',
    'Andromeda', 'launched', ',', 'and', 'that', "'", 's', 'how',
    'long', 'it', 'took', 'BioWare', 'Montreal', 'to', 'admit', 'that',
    'nothing', 'more', 'can', 'be', 'done', 'with', 'the', 'ailing',
    'game', "'", 's', 'story', 'mode', '.'], ['Technically', ',', 'it',
    'wasn', "'", 't', 'even', 'a', 'full', 'five', 'months', ',', 'as',
    'Andromeda', 'launched', 'on', 'March', '21', '.']], ...]
    

     

    3. 工作原理

     

    该实例最后一步的输出很简单直接,展示了各个对象不同的特征。输出内容的第一行是新语料库的单词列表,它与句子、段落、文件等更高级的结构没有关系。

     

    第二行是1.txt文件中所有句子组成的列表,其中每个句子都是由该句子中单词组成的列表。

     

    第三行是0.txt文件中所有段落组成的列表,其中每个段落对象又是由该段落中的句子组成的列表。从中可以发现,这些段落和句子保留了很多原有的结构。

     

     

    06 读取RSS信息源的内容

     

    丰富网站摘要(Rich Site Summary,RSS)信息源(feed)是一种计算机可读格式,用于传送互联网上定期更新的内容。大多数提供通知信息的网站以这种格式提供更新,例如新闻文章、在线出版物等。订阅者可以通过规范化格式定期访问其更新信息。

     

    1. 准备工作

     

    本段实例的目标是读取一个RSS信息源并访问其中的一条内容。为此,我们将使用全球之声(Mashable)提供的RSS信息源。全球之声是一个数字媒体网站。简而言之,它是一个科技和社交媒体的博客列表。该网站的RSS信息源网址(URL)是:

     

    http://feeds.mashable.com/Mashable

     

    另外,我们需要用feedparser库来读取RSS信息源。打开终端并运行以下命令即可在你的计算机上安装这个库:

     

    pip install feedparser
    

     

    安装好feedparser库后,我们就可以开始实现第一个读取RSS信息源的Python程序。

     

    2. 如何实现

     

    (1)创建一个新的Python文件,命名为rssReader.py,并添加以下代码:

     

    import feedparser
    

     

    (2)将全球之声信息源(Mashable feed)载入内存中,添加以下代码:

     

    myFeed = feedparser.parse("http://feeds.mashable.com/Mashable")
    

     

    myFeed对象包含全球之声信息源的第一页,通过feedparser自动下载和解析该信息源并填充到合适的位置。myFeed对象的条目列表将包含每个帖子(post)。

     

    (3)检查当前信息源的标题并计算帖子数目:

     

    print('Feed Title :', myFeed['feed']['title'])
    print('Number of posts :', len(myFeed.entries))
    

     

    在第一行代码中,我们通过myFeed对象获取到了信息源的标题。在第二行代码中,我们计算了myFeed对象中entries对象的长度。如前所述,entries对象是一个包含解析后信息源中所有帖子的列表。运行代码,输出如下所示:

     

    Feed Title: Mashable
    Number of posts : 30
    

     

    标题是Mashable,当前,Mashable每次最多存放30个帖子到信息源。

     

    (4)从entries列表中获取第一个post,并打印输出其标题:

     

    post = myFeed.entries[0]
    print('Post Title :',post.title)
    

     

    在第一行代码中,我们获取了entries列表中的第一个元素并将其加载到post对象中。在第二行代码中,我们打印输出了post对象的标题。运行代码,输出应该与以下内容相似:

     

    Post Title: The moon literally blocked the sun on Twitter
    

     

    这里提到输出内容应该与其相似而不是完全一样,是因为信息源在不断自我更新。

     

    (5)访问post的原始HTML内容,并将其打印输出:

     

    content = post.content[0].value
    print('Raw content :\n',content)
    

     

    首先,我们访问post的内容对象并获取其具体值,打印输出如下:

     

    Output: Feed Title: Mashable
    Number of posts : 30
    Post Title: The moon literally blocked the sun on Twitter
    Raw content :
    <img alt=""
    src="https://i.amz.mshcdn.com/DzkxxIQCjyFHGoIBJoRGoYU3Y8o=/575x323/
    filters:quality(90)/https%3A%2F%2Fblueprint-apiproduction.s3.amazonaws.com%2Fuploads%2Fcard%2Fimage%2F569570%2F0ca
    3e1bf-a4a2-4af4-85f0-1bbc8587014a.jpg" /><div style="float: right;
    width: 50px;"><a
    href="http://twitter.com/share?via=Mashable&text=The+moon+literally
    +blocked+the+sun+on+Twitter&url=http%3A%2F%2Fmashable.com%2F2017%2F
    08%2F21%2Fmoon-blocks-sun-eclipse-2017-
    twitter%2F%3Futm_campaign%3DMash-Prod-RSS-Feedburner-All-
    Partial%26utm_cid%3DMash-Prod-RSS-Feedburner-All-Partial"
    style="margin: 10px;">
    <p>The national space agency threw shade the best way it knows how:
    by blocking the sun. Yep, you read that right. </p>
    <div><div><blockquote>
    <p>HA HA HA I've blocked the Sun! Make way for the Moon<a
    href="https://twitter.com/hashtag/SolarEclipse2017?src=hash">#Solar
    Eclipse2017</a> <a
    href="https://t.co/nZCoqBlSTe">pic.twitter.com/nZCoqBlSTe</a></p>
    <p>— NASA Moon (@NASAMoon) <a
    href="https://twitter.com/NASAMoon/status/899681358737539073">Augus
    t 21, 2017</a></p>
    </blockquote></div></div>

     

    3. 工作原理

     

    互联网上大多数的RSS信息源都以时间顺序排列,将最新的帖子放到最上面。因此,在该实例中我们每次访问的都是信息源提供的最新内容。信息源本身是不断更新的。所以,每次运行程序时,输出的格式保持不变,但是输出的内容却可能发生改变,这取决于信息源更新的速度。

     

    另外,我们在控制台直接输出原始的HTML文本而不是其文本内容。接下来,我们将解析HTML并从页面获取我们需要的信息。最后,本实例可以附加以下内容:读取你想要的任何信息源,将信息源中所有帖子的信息存储到磁盘,并利用它创建一个纯文本的语料库。当然,你可以从上一个和下一个实例中获得启发。

     

     

    07 使用BeautifulSoup解析HTML

     

    大多数情况下,你需要处理的网上数据都以HTML页面的形式存在。因此,我们认为有必要向你介绍Python的HTML解析方法。有很多Python模块可以用来解析HTML,在接下来的实例中,我们将使用BeautifulSoup4库来解析HTML。

     

    1. 准备工作

     

    BeautifulSoup4包适用于Python2和Python3。在使用这个包之前,我们需要提前下载并将它安装在解释器上。和之前一样,我们将使用pip来安装这个包。在命令行运行以下命令:

     

    pip install beautifulsoup4
    

     

    另外,你还需要本文Dropbox文件夹中的sample-html.html文件。如果你还没有下载该文件,请从以下链接下载:

     

    https://www.dropbox.com/sh/bk18dizhsu1p534/AABEuJw4TArUbzJf4Aa8gp5Wa?dl=0

     

    2. 如何实现

     

    (1)完成所有准备工作后,从导入以下声明开始:

     

    from bs4 import BeautifulSoup
    

     

    从bs4模块中导入BeautifulSoup类,它将用于解析HTML。

     

    (2)将一个HTML文件加载到BeautifulSoup对象中:

     

    html_doc = open('sample-html.html''r').read()
    soup = BeautifulSoup(html_doc, 'html.parser')
    

     

    在第一行代码中,我们将sample-html.html文件的内容加载到str对象html_doc中。然后,创建了一个BeautifulSoup对象,需要解析的HTML文件作为第一个参数,html.parser作为第二个参数。通过以上操作,BeautifulSoup对象使用html解析器来解析文档。它将文档内容加载到soup对象中进行解析以备使用。

     

    (3)soup对象最主要、最简单且最有用的功能就是去除所有的HTML标签并获取文本内容。添加以下代码:

     

    print('\n\nFull text HTML Stripped:')
    print(soup.get_text())
    

     

    在soup对象上调用的get_text()方法将返回HTML标签去除后的文件内容。运行以上代码,将得到以下输出:

     

    Full text HTML Stripped:
    Sample Web Page
    Main heading
    This is a very simple HTML document
    Improve your image by including an image.
    Add a link to your favorite Web site.
    This is a new sentence without a paragraph break, in bold italics.
    This is purely the contents of our sample HTML document without any
    of the HTML tags.
    

     

    (4)有时不仅需要去除HTML标签,可能还需要获取特定标签的内容。访问其中的一个标签:

     

    print('Accessing the <title> tag :', end=' ')
    print(soup.title)
    

     

    soup.title将返回文件中的第一个标题(title)标签。以上代码的输出如下所示:

     

    Accessing the <title> tag : <title>Sample Web Page</title>
    

     

    (5)现在,我们需要某个HTML标签的文本内容。通过以下代码获取<h1>标签的内容:

     

    print('Accessing the text of <H1> tag :', end=' ')
    print(soup.h1.string)
    

     

    soup.h1.string命令将返回以<h1>标签开头的文本。以上代码的输出如下所示:

     

    Accessing the text of <H1> tag : Main heading
    

     

    (6)访问标签的属性。这里,我们将访问img标签的alt属性。添加以下代码行:

     

    print('Accessing property of <img> tag :', end=' ')
    print(soup.img['alt'])
    

     

    通过仔细观察,你会发现访问标签属性的语法和访问标签文本的语法是不同的。运行以上代码,得到以下输出:

     

    Accessing property of <img> tag : A Great HTML Resource
    

     

    (7)最后,一个HTML文件中同一类型的标签可能多次出现。使用“.”语法仅能获取文件中第一次出现的标签。为了获取所有的标签,我们将使用find_all()函数,如下所示:

     

    print('\nAccessing all occurences of the <p> tag :')
    for p in soup.find_all('p'):
        print(p.string)
    

     

    在BeautifulSoup对象上调用find_all()函数,参数是标签名,它将搜索整个HTML树并返回符合条件的标签列表。我们使用for循环来遍历该列表,并将BeautifulSoup对象中所有<p>标签的内容/文本打印并输出:

     

    Output: Full text HTML Stripped:
    Sample Web Page
    Main heading
    This is a very simple HTML document
    Improve your image by including an image.
    Add a link to your favorite Web site.
    This is a new sentence without a paragraph break, in bold italics.
    Accessing the <title> tag : <title>Sample Web Page</title>
    Accessing the text of <H1> tag : Main heading
    Accessing property of <img> tag : A Great HTML Resource
    Accessing all occurences of the <p> tag :
    This is a very simple HTML document
    Improve your image by including an image.
    None
    

     

    3. 工作原理

     

    BeautifulSoup4是一个很方便的库,可以用于解析任何HTML和XML内容。它支持Python内置的HTML解析器,但是你也可以使用其他第三方的解析器,例如,lxml解析器和纯Python的html5lib解析器。

     

    这里,我们使用Python内置的HTML解析器。如果你了解了HTML并会编写简单的HTML代码的话,输出结果是非常容易理解的。

     

    关于作者:克里希纳·巴夫萨(KrishnaBhavsar)花了大约10年时间在各行业领域如酒店业、银行业、医疗行业等进行自然语言处理、社交媒体分析和文本挖掘方面的研究。他致力于用不同的NLP语料库如StanfordCoreNLP、IBM的 SystemText和BigInsights、GATE和NLTK来解决与文本分析有关的行业问题。

    纳雷什·库马尔(NareshKumar)曾为财富500强企业设计、实施和运行超大型因特网应用程序,在这方面他拥有超过十年的专业经验。他是一位全栈架构师,在电子商务、网络托管、医疗、大数据及分析、数据流、广告和数据库等领域拥有丰富的实践经验。

    本文摘编自《自然语言处理Python进阶》,经出版方授权发布。

     

    延伸阅读《自然语言处理Python进阶

    点击上图了解及购买

    转载请联系微信:togo-maruko

     

    推荐语:本书包含的实例可以让你学会使用NLTK(处理NLP任务的主要Python平台)完成自然语言处理的各种任务,涵盖了自然语言理解、自然语言处理和句法分析等。 

     

    640?

     

    据统计,99%的大咖都完成了这个神操作

     

    640?wx_fmt=png

     

    更多精彩

     

    在公众号后台对话框输入以下关键词

    查看更多优质内容!

     

    PPT | 报告 | 读书 | 书单 | 干货 

    大数据 | 揭秘 | Python | 可视化

    人工智能 | 机器学习 | 深度学习 | 神经网络

    AI | 1024 | 段子 | 区块链 | 数学

     

    猜你想看

     

     

     

    Q: 你处理过哪些类型的文档?

    欢迎留言与大家分享

    觉得不错,请把这篇文章分享给你的朋友

    转载 / 投稿请联系:baiyu@hzbook.com

    更多精彩,请在后台点击“历史文章”查看

    640?wx_fmt=jpeg

    640?wx_fmt=gif点击阅读原文,了解更多

    展开全文
  • 虽然可利用 Open XML 文件格式检索 Microsoft Word 文档中的内容快,但执行此操作需要做一些工作。Open XML SDK 2.0 添加了将简化对 Open XML 文件格式的访问的强类型类:SDK 将简化检索任务,例如,检索包含文档...

    http://msdn.microsoft.com/zh-cn/library/gg615380(v=office.14).aspx

    概述

    虽然可利用 Open XML 文件格式检索 Microsoft Word 文档中的内容快,但执行此操作需要做一些工作。Open XML SDK 2.0 添加了将简化对 Open XML 文件格式的访问的强类型类:SDK 将简化检索任务,例如,检索包含文档样式或 stylesWithEffects 部分的 XDocument 实例。在给定 XML 内容的情况下,您可以对信息进行存档、修改并重新应用信息或将信息应用于新文档。此直观操作方法附带的代码示例将介绍如何使用 SDK 检索样式或 stylesWithEffects 部分 - 该代码示例中并未介绍如何将样式应用于新文档。

    编码

    此直观操作方法附带的示例将包含检索 Word 2007 或 Word 2010 文档的样式或 stylesWithEffects 部分的 XDocument 实例所需的代码。以下各节详细介绍了该代码。请注意,在 Word 2007 中创建的文档只有一个 styles 部分;Word 2010 添加了第二个 stylesWithEffects 部分。为了使文档能够在 Word 2010 和 Word 2007 之间来回转换,Word 2010 保留了原始 styles 部分和新 styles 部分。Open XML 规范需要 Microsoft Word 忽略它无法识别的部分;Word 2007 无法识别由 Word 2010 添加到文档的 stylesWithEffects 部分。应用程序必须对检索样式或 stylesWithEffects 部分所获得的结果进行解释。

    设置引用

    若要使用 Open XML SDK 2.0 中的代码,您必须向您的项目添加几个引用。虽然示例项目已包含这些引用,但您需要在您的代码中显式引用以下程序集:

    • WindowsBase - 可以根据您创建的项目的类型为您设置此引用。

    • DocumentFormat.OpenXml - 由 Open XML SDK 2.0 安装。

    您还应将下面的 using/Imports 语句添加到代码文件的顶部。

    using System;
    using System.IO;
    using System.Xml;
    using System.Xml.Linq;
    using DocumentFormat.OpenXml.Packaging;
    
    

    检查过程

    WDExtractStyles 过程接受两个参数:第一个参数包含一个指示要修改的文件路径的字符串,第二个参数指示是要检索 styles 部分还是更新的 stylesWithEffects 部分(实际上,您需要对 Word 2010 文档调用此过程两次,以便检索这两个部分)。此过程将返回一个 XDocument 实例,该实例包含您请求的完整 styles 或 stylesWithEffects 部分以及文档的所有样式信息(或一个空引用,如果您情况的部分不存在)。

    Public static XDocument WDExtractStyles(
      string fileName, 
      bool getStylesWithEffectsPart = true)
    
    

    此过程将检查您指定的文档,并查找指定的 styles 或 stylesWithEffects 部分。如果该部分存在,则此过程会将其作为 XDocument 实例返回。若要调用此过程,请传递参数值,如示例代码中所示。在您运行示例代码之前,请务必提供一个名为 C:\temp\StylesFrom.docx 的文档,该文档(用于演示)包含一些示例已修改的样式。

    var styles = WDExtractStyles(@"C:\temp\StylesFrom.docx", true);
    if (styles != null)
      Console.WriteLine(styles.ToString());
    
    

    访问文档

    该代码首先会创建一个名为 styles 的变量,此过程在退出之前将返回该变量。

    XDocument styles = null;
    // Code removed here…
    return styles;
    
    

    接下来,该代码将使用 WordprocessingDocument.Open 方法打开文档,并指示应打开此文档以供只读访问(最后的 false 参数)。在打开文档的情况下,该代码将使用 MainDocumentPart 属性导航到主文档,然后准备一个名为 stylesPart 的变量来保存对 styles 部分的引用。

    using (var document = WordprocessingDocument.Open(fileName, false))
    {
      var docPart = document.MainDocumentPart;
    
      var stylesPart = null;
      // Code removed here…
    }
    
    

    查找正确的 Styles 部分

    接下来,该代码将使用 setStylesWithEffectsPart 布尔参数来检索对请求的 styles 部分的引用。然后,该代码将基于此值检索 docPart 变量的特定属性,并将其存储在 stylesPart 变量中。

    if (getStylesWithEffectsPart)
      stylesPart = docPart.StylesWithEffectsPart;
    else
      stylesPart = docPart.StyleDefinitionsPart;
    

    检索部分内容

    如果请求的 styles 部分存在,则该代码必须该部分在 XDocument 实例中的完整内容。每个部分均提供一个用于返回 Stream  GetStream 方法。该代码会将Stream 实例传递给 XmlNodeReader.Create 方法,然后调用 XDocument.Load 方法,并将 XmlNodeReader 作为参数传递。在使用 XDocuments 和 Open XML 部分时,此系列步骤很常见。您会发现它们很常用。

    if (stylesPart != null)
    {
      using (var reader = XmlNodeReader.Create(
        stylesPart.GetStream(FileMode.Open, FileAccess.Read)))
      {
        // Create the XDocument:
        styles = XDocument.Load(reader);
      }
    }
    

    示例过程

    下面的代码示例包含完整的示例过程。

    public static XDocument WDExtractStyles(
      string fileName, 
      bool getStylesWithEffectsPart = true)
    {
      XDocument styles = null;
     
      using (var document = WordprocessingDocument.Open(fileName, false))
      {
        var docPart = document.MainDocumentPart;
     
        StylesPart stylesPart = null;
        if (getStylesWithEffectsPart)
          stylesPart = docPart.StylesWithEffectsPart;
        else
          stylesPart = docPart.StyleDefinitionsPart;
     
        if (stylesPart != null)
        {
          using (var reader = XmlNodeReader.Create(
            stylesPart.GetStream(FileMode.Open, FileAccess.Read)))
          {
            // Create the XDocument:
            styles = XDocument.Load(reader);
          }
        }
      }
      return styles;
    }
    
    读取

    此直观操作方法附带的示例演示了将检索 Word 文档中的 styles 或 stylesWithEffects 部分的代码。若要使用该示例,请安装 Open XML SDK 2.0(可通过“浏览”一节中列出的链接获得)。该示例还将使用作为 Open XML SDK 2.0 代码段集的一部分包含的修改后的代码。“浏览”一节还包括指向完整代码段集的链接,但您无需下载并安装代码段即可使用该示例。

    示例应用程序仅演示了在修改文档结构时可与之交互的由 Open XML SDK 2.0 提供的几个可用属性和方法。有关详细信息,请查看 Open XML SDK 2.0 Productivity Tool 附带的文档:单击应用程序窗口左下角的“Open XML SDK 文档”选项卡,搜索要研究的类。尽管文档并不总是包含代码示例,但借助此处所示的示例和文档,您应能够成功修改示例应用程序。


    展开全文
  • Word文档中数据汇总到Excel表格前言一、应用场景二、程序思路及准备工作思路如下:准备工作:三、程序代码1、主程序2、获取Word文档列表3、提取文档内数据4、导入到Excel表格四、遇到的问题1、错误AttributeError:...

    前言

    我并非一个专业的程序员,只是一个普通的编程爱好者、一只小菜鸟。得益于网络上各路大神的技术分享,我学习到很多知识,解决了编程路上的一个个难题。如今我想要将我学习到的知识,遇到的难题记录下来,分享出去,希望能够帮助到有需要的小伙伴。如有错误,请各位多多指教,共同交流!

    一、应用场景

    1、调查问卷数据导入Excel进行统计
    2、普查信息统计:如人口普查、资源普查
    3、HR统计员工个人信息、老师统计学生个人信息
    等等
    以上的工作都可以人工录入,但无疑这会很耗时,效率非常低。十个文档可以这样做,一百个也可以,但几百个呢?上千个呢?那还是不得不借助科技的力量了。

    二、程序思路及准备工作

    思路如下:

    1、将需录入的Word文档放在同一个文件夹
    2、获取文件夹内文档的文件名放入列表
    3、打开每个文档,提取数据到列表中
    4、打开表格,将列表中数据按顺序填入表格

    准备工作:

    本程序基于win32com库,所以要先装好这个库。

    三、程序代码

    1、主程序

    import win32com
    import os
    from win32com.client import Dispatch
    
    def main():
    	w = win32com.client.Dispatch('Word.Application')   #打开Word,如果你用WPS,那就是"Kwps..Application"  
    	w.Visible = 0                                      #不可见,在后台运行
    	w.DisplayAlerts = 0                                #不报错,不弹出警告框
    	
    	e = win32com.client.Dispatch('Excel.Application')   #同理
    	e.Visible = 0
    	e.DisplayAlerts = 0
    	
    	docx_path="D:\\Desktop\\lvyou\\123\\"
    	name=list(get_filename(dacx_path,'docx'))
    	data_list_all=[]
    	error_num=0
    	ok_num=0
    	error_name=[]
    	total=len(name)
    	
    	for i in name:
    	    try:                                          #防止出错而导致程序停止
    	        add_str=docx_path+i
    	        lis=get_word_data(add_str)               #获取文档数据函数,返回数据列表
    	        data_list_all.append(lis)                #总列表
    	        ok_num=ok_num+1
    	        percent=round(ok_num*100/total,2)        #提取进度,
    	        print("已完成:"+str(percent)+"%   "+i)
    	    except:
    	        print(i+" 出错")                          #如果出错便提示
    	        error_num=error_num+1                     #出错数
    	        error_name.append(i)                      #出错的文档列表
    	        continue
    	
    	excel_file_path="D:\Desktop\lvyou\GIS.xlsx"
    	excel=e.Workbooks.Open(excel_file_path).Worksheets(1)   #打开表格
    	
    	print("请稍后")
    	for i in range(len(list_all)):                          #将数据逐一导入,也可以同时导入
    	    to_excel(list_all[i],i)
    	
    	w.Quit()
    	e.Quit()
    

    2、获取Word文档列表

    def get_filename(path,filetype):            # 输入路径、文件类型 例如'.docx' ,获得该路径下所有此文件类型的文件名
        name = []
        for root,dirs,files in os.walk(path):
            for i in files:
                if filetype+' ' in i+' ':       
                    name.append(i)
        return name                             # 输出带后缀的文件名组成的列表
    

    3、提取文档内数据

    提取出来的数据还要经过处理才可以使用,怎么处理要分情况,常用的函数有split(),strip(),replace() 等,还可以用正则表达式提取字符串中特定数据。

    def get_word_data(add_str):                   #add_str为文档文件名
        doc = w.Documents.Open(add_str)            #打开文档
        w.ActiveDocument.Revisions.AcceptAll()     #如果文档中有修订,为防止错乱,先接受所有修订
        name =doc.Tables[0].Cell(1,2).Range.Text.split()[0]     # 数据2
        addr=doc.Tables[0].Cell(2,2).Range.Text.split()[0]      # 数据1
        number=str(doc.Tables[0].Cell(7,1).Range.Text)[3:]      # 数据3 
        doc.Close()
        return name,addr,number
    

    4、导入到Excel表格

    def to_excel(lis,i):        #lis为数据,i为第i个文档的数据
        zimu=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q"]  #有个函数可以直接生成字母列表,但是懒得找了
        for a in range(len(lis)):
            excel.Cells(i+2,zimu[a]).value = lis[a]
        excel.SaveAs(excel_file_path)     #保存
    

    四、遇到的问题

    1、错误AttributeError: word.Application.Quit

    这个问题是因为 win32com.client.Dispatch()中参数错误,要根据所安装的文档软件填写。

    2、word文档中复选框的识别

    Word文档中复选框提取出来后的内容完全无法识别它是有勾选还是没有勾选。这个问题我想了好久,最终用了一种曲折的方法成功识别,这个方法下一篇文章再单独讲吧。

    总结

    以上就是本文档的全部内容,win32com库的功能还有很多,我将继续探索,让它可以帮助我们解放双手,享受编程带来的乐趣。

    第一次写技术分享文章,较为粗略,有问题可以私信和我交流!

    展开全文
  • Java 从word中提取文字信息(开发笔记)

    千次阅读 2018-08-23 16:19:46
    所需jar包: 下载地址: https://download.csdn.net/download/qq_34246546/10622595   代码如下: package com.xc.test.utils; import java.io.File; import java.io.FileInputStream; import java.io....
  • Say someone sent you a Word document with a lot of images, and you want you to save those images on your hard drive. You can extract images from a Microsoft Office document with a simpletrick. 假设有...
  • 这可以通过找到 xlswrite 所需的范围所花费的时间来完成。 使用剪贴板代替 COM 接口。 非常适合快速将数据导入 Word 或 Excel 报告。 单个粘贴可以使用nxm数据集填充Word中的整个nxm表。 三个简单的方向: 从您...
  • 如何识别Word文档中的复选框前言一、程序...用Xpath提取所需数据三、遇到的问题总结 前言 一、程序思路及准备工作 二、使用步骤 1.引入库 2.将Word文档转为html并读入 3.用Xpath提取所需数据 三、遇到的问题 总结 ...
  • 怎么提取pdf的表格数据In this article, we talk about the challenges and principles of extracting tabular data from PDF docs. We also compare six software tools to find out how they perform their ...
  • 点击上方“AI公园”,关注公众号,选择加“星标“或“置顶”作者:Dipanjan (DJ) Sarkar编译:ronghuaiyang导读介绍了基于深度学习的文本数据特征...
  • 打开本机Word文件,提示下图示问题: 通过开始菜单打开已安装的office也是一样的 解决方法 回想之前杀毒后把一些文件删除了,回到隔离区寻找后也没解决问题,之后使用360安全卫士扫描后发现软件被卸载了,最后...
  • 性能测试方面,重用响应数据至关重要。几乎(如果不是全部!)负载测试场景假设您: 从先前的响应中提取有趣的方面,并在下一个请求重用它们(也称为相关) 确保实际响应符合预期(又称断言) ...
  • 大家好,今天有一个公务员的小伙伴委托我给他帮个忙,大概是有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改)一共有近2600条类似格式的表格细栏,每个栏目包括的信息有:日期发...
  • 因此stm32的串口中断,还有一个IDLE中断,用来产生串口接受一帧数据而产生的中断,比如说串口发来n个数据,会产生n次接收中断和一次IDLE中断,因此方便使用者来接收主机发送或者从机返回的数据! 原文链接:...
  • 2、制作XX方案或XX报告,Word文档布局和格式统一,只是填充的内容信息来源于Excel。 3、制作通知书,从excel表格中将每个人的数据分别填入到docx通知书。 4、其他各式各样的场景,反正都满足同样的条件,就是:*...
  • ppt文字提取word

    2020-04-30 16:30:42
    把PPT转Word有多种方法,一种为复制法,第二种为发送法,第三种为中间转换法,第四种为用宏VBA快速转换法。除发送法外,其它三种方法只能转换文字,不能转换背景图片;而第一四种方法不能保留原格式,第二三种能保留...
  • 文章目录内容介绍福利Word 文档操作Word 文档编辑Word 文档格式Word 图文混排 内容介绍 对于数据分析师来说,日常工作最重要的环节不是敲代码,做题述师和调参侠,本身忽略了一项工作就是做 文字性的报告 内容。熟练...
  • 基本思想是将一个word文件视作一个document对象,其中处理一个个paragraph对象,text对应paragraph的文本内容。 同样可以处理table,picture等对象。 导入库和实例化 from docx import Document do...
  • Java使用poi读取word文档中的表格

    万次阅读 热门讨论 2018-09-14 17:32:44
    使用poi读取文档中的表格,当有多个表格时可以指定需要读取的表格,同时支持读取docx和doc格式。需要添加poi的jar包 测试文档如下图: 程序代码:  package com.fise19.read; import java.io....
  • word2vec+KNN 关键词提取

    2020-09-11 22:18:35
    Word2Vec词聚类文本关键词抽取方法的主要思路是对于用词向量表示的文本词语,通过K-Means算法对文章的词进行聚类,选择聚类中心作为文章的一个主要关键词,计算其他词与聚类中心的距离即相似度,选择topN个距离...
  • word中导出高分辨率pdf

    千次阅读 2019-10-18 16:29:19
    1、安装有软件:Adobe Acrobat DC, 可通过下面链接下载: ...shfl=sharepset 提取码:ai7u 2、图片格式设置: 如何使用matlab进行绘图,一定要保存图片格式为.tiff,这样才不会...3、word在插入高分辨率图片前...
  • 1,java自带工具包实现对word的排版和写入 import java.awt.Color; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.util.List; import com.lowagie.text.Document...
  • MVCWord文档导入到数据库,首先我们需要理解她的存储过程,C#中Word文档不能直接导入到数据库,因而我们借用第三的工具类。存储过程:先把Word文档存储到临时文件夹再把Word文档转换成html文件然后存储...
  • 谈谈MATLAB:CSV数据提取与处理

    千次阅读 2019-08-09 10:33:04
    MATLAB:Excel数据提取与处理
  • 目录 第1步:基础知识 第2步:确定宏观与微观理解 ...一旦识别,提取和清理了用例所需的内容,下一步就是要了解该内容。许多用例,具有最重要信息的内容以自然语言(例如英语,德语,西班牙语,中文等...
  • VS2005进行WORD文档开发

    千次阅读 2014-03-05 15:27:30
    折腾了将近一个月的WORD文档开发终于告一段落。这件事已经很多大牛已经做过了。并且很多方法都已经非常详细,提供的资料也非常齐全。不过由于时间的久远并且较为散乱。所以我学习时间过程还是走了一些些弯路。...
  • 提取office(ppt、word、excel)文档的文字,提取pdf文档的文字,包含所需的jar包
  • #include "msword9.h" #include "CTables0.h" #include "CnlineShapes.h" #include "CnlineShape.h" #include "CPageSetup.h" #include "CFont0.h" #include "CParagraphFormat.h" .cpp文件 void XXXDlg::...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,495
精华内容 10,598
关键字:

在word文档中提取所需数据