2014年2月22日 星期六

寫C語言需要注意的型別問題 portablility


參考來源:http://blog.urdada.net/2008/04/18/85/

不同位元(32 bits, 64 bits)的作業系統下面的型別大小不一定相同


1.《Bypass the 2GB file size limit on 32-bit Linux => 64-bit 的系統下,long 的長度也是各自表述的!
2.int 的大小即使到了 64-bit 的機器上,大部分的系統仍然使用 4 bytes 的大小而已,這主要是為了避免程式從 32-bit 系統轉換到 64-bit 系統需要修改太多地方
3.參考 Wikipedia: 64-bit data models 的說明
絕大多數的 UNIX 系統在 64-bit 下面採用 LP64 這種 data model,此時 long 就不再是固定為 4 bytes 大小,而是變成 8 bytes 的大小了!
然而,Win64 卻不是使用 LP64,而是採用 LLP64 這個 data model,這時候 long 的大小仍然還是 4 bytes

Many 64-bit compilers today use the LP64 model (including Solaris, AIX, HP, Linux, Mac OS X, and IBM z/OS native compilers). Microsoft's VC++ compiler uses the LLP64 model.
兩種 data model 的最大差異點就是 long 這個資料型態的大小,LP64 是 64-bit,而 LLP64 則是 32-bit
LLP64 data model 基本上可以說跟 32-bit 的系統一樣,唯一差別只有位址(pointer)改成了 64-bit 而已。資料物件(class, structure) 等如果沒有包含 pointer 的成員的話,整個物件的大小是與 32-bit 系統一樣的!
而 LP64 則是除了位址(pointer)改成 64-bit 之外,long 的大小也變成了 64-bit 大小。所以在 UNIX 下面,要把 32-bit 程式 porting 到 64-bit 可能要比 Windows 多花費多一點功夫。
兩個型別問題影響著程式的相容性:
  1. 在 UNIX 下面,long 的大小在 32-bit 與 64-bit 的系統下是不一樣的
  2. 同樣是 64-bit 系統,UNIX 與 Windows 對於 long 的大小看法是不一致的
為了使程式在 32-bit 與 64-bit 之間以及 UNIX 與 Windows 之間的相容性提昇,改用固定長度的資料型態是寫程式的一個好習慣
在 UNIX 下面,我們可以改用 stdint.h 這個 header file 中對於資料型態的定義:
int8_t     8-bit signed interger
int16_t    16-bit signed interger
int32_t    32-bit signed interger
int64_t    64-bit signed interger
uint8_t    8-bit unsigned interger
uint16_t   16-bit unsigned interger
uint32_t   32-bit unsigned interger
uint64_t   64-bit unsigned interger
在 Windows 下面,則改用下面這些整數固定大小的資料型態
INT8       8-bit signed integer
INT16      16-bit signed integer
INT32      32-bit signed integer
INT64      64-bit signed integer
UINT8      8-bit unsigned integer
UINT16     16-bit unsigned integer
UINT32     32-bit unsigned integer
UINT64     64-bit unsigned integer
絕對不要再使用 int 和 long !請愛用stdint.h內的型別
尤其是寫網路程式時,作業系統與作業系統的位元數所造成的型別相容性問題
參考資料:
  1. Wikipedia: 64-bit data models
  2. 64-Bit Programming Models: Why LP64?
  3. Introduction to Win32/Win64
  4. Porting 32-bit Applications to the Itanium® Architecture
  5. Preparing Code for the IA-64 Architecture (PDF)

2013年7月27日 星期六

python自然語言教學 nltk課程

參考資料:http://ccl.pku.edu.cn/alcourse/nlp/

課程名稱:自然語言處理導論課程討論區 ( 最新貼:2010-6-16 9:21:04 )
任課教師:詹衛東 *  劉揚王厚峰常寶寶*** 北京大學中文系** 北京大學信息科學技術學院
電子郵件:zwd@pku.edu.cn (詹卫东)liuyang@pku.edu.cn(劉揚)
辦公電話:6276581062765835-205(分機)
有關本課程的任何問題和建議,都歡迎與我們聯繫
2011-2012學年第二學期上課時間:2012年2月13日~6月8日( 5~6節地點:教206考試時間
教學參考資料
史蒂芬鳥,伊万·克萊因和愛德華·洛珀。2009年與Python自然語言處理。O'Reilly Media出版。
克里斯托弗D.萬寧和辛里奇SCHUTZE的的。1999年統計自然語言處理的基礎。麻省理工學院出版社。
丹尼爾Jurafsky和詹姆斯·馬丁。2000年語音和語言處理。培生教育。
課程進度安排                 

 
序號 內容提要 講義參考資料
第1週
2012年2月13日
課程概述:課程安排, 參考文獻說明, 等等.
緒論:什麼是自然語言處理?
課程安排 问答系统:ElizaIBM Watson,……
機器翻譯系統:GoogleWorldLingo,……
自然語言處理的支撐科學是什麼?(Author:Shuly Wintner)
漫話人工智能 (顧森)
 
第2週
2012年2月20日
理論基礎:
中文文本的自動分詞
第02章漢語自動分詞研究述評
 
第3週
2012.2.27
理論基礎:
詞性標註方法
Chapter_03 
 
楊孝華二卷
 
第4週
2012年3月5日
理論基礎:
漢語的句法結構分析(上)
Chapter_04(I)
簡單句法分析方法示例
(自底向上,自頂向下,左角分析法)
 
歐萊的分析算法
第5週
2012.3.12
理論基礎:
漢語的句法結構分析(下)
chapter_04(II)
 
句法結構歧義的程度
第6週
2012.3.19
理論基礎:
語義分析
 
Chapter_05 
第7週2012.3.26
 
理論基礎:
語篇分析(王厚峰)
Chapter_06
 
第8週
2012.4.2
討論課(第一次大作業)
作業要求:
 
 
  • 根據選課人數情況,採用分組報告形式在課堂上進行交流。
  • 所有選課同學均需提交書面報告。
  • 報告文件名 ​​請採用統一格式:
     學號_姓名_文章名.doc/pdf
  • 可以合作完成,但人數不得超過3人。合作完成的報告,要詳細註明各人的分工情況。
  • 作業電子版(word或pdf文件)發至 zwd@pku.edu.cn
  • 請在2012.4.16(含)之前提交作業。如果需要延期提交,請給出理由。但不應晚於4.23日提交。晚於4.23日提交的作業將罰分。
第9週
2012年4月9日
工程實踐:
Python及NLTK包的應用—— 訪問語言資源
教材下載:NLP與Python
Chapter_07
要求:熟悉教材第1章第1、2、3、4節;熟悉教材第2章第2、3節,了解第1、4節。
蟒蛇-2.5.4
第10週
2012年4月16日
工程實踐:
Python及NLTK包的應用—— 文本處理基礎
Chapter_08
要求:熟悉教材第3章第1、2、8、9節,了解第3、4、5、6、7節。
第11週
2012年4月23日
工程實踐:
Python及NLTK包的應用—— 程序設計進階
Chapter_09
要求:熟悉教材第4章1、2、3、4節,了解第5、6節。
第12週
2012.4.30
工程實踐:
Python及NLTK包的應用—— 分詞和詞性標註
Chapter_10
要求:熟悉教材第5章第1、2、3節,了解第4、5節。
第13週
2012.5.7
工程實踐:
Python及NLTK包的應用—— 句法分析實現
Chapter_11
要求:了解教材第8章第1、2、3、4節。[特別說明,期末考試第8章第1、2、3、4節不作要求]
第14週
2012年5月14日
工程實踐:
Python及NLTK包的應用—— 信息抽取
Chapter_12
要求:熟悉教材第7章第1、2、3、4、5、6節。
第15週
2012.5.21
工程實踐:
Python及NLTK包的應用—— 文本分類
Chapter_13
要求:熟悉教材第6章第1、2、3節,了解第4、5、6節。[特別說明,期末考試第6章第4、5、6節不作要求]
第16週
2012年5月28日
機器翻譯(常寶寶)
  
第17週
2012年6月4日
 
討論課 (第二次大作業)
漢語自動分詞與詞性標註
 
 
  • 根據選課人數情況,採用分組報告形式在課堂上進行交流。
  • 所有選課同學均需提交書面報告。
  • 可以合作完成,但人數不得超過3人。合作完成的報告,要詳細註明各人的分工情況。
  • 在6月11日(個別情況需要延期,須給出理由,但不遲於6月25日)前,請將所有程序源碼、數據文件及實驗報告(限pdf格式)打包壓縮為“學號_姓名.rar”,將其作為附件發送至liuyang@pku.edu.cn(我收到後會有回复,注意確認)。
第18週
2012.6.11 
考試  
 
 

2013年1月7日 星期一

利用BeautifulSoup抓取所有網頁中的子連結


from BeautifulSoup import BeautifulSoup as bs
import urllib

#建立BeautifulSoup物件bsen
url = "http://kilfu0701.blogspot.tw/2011/03/python-beautifulsoup.html" 
handle  = urllib.urlopen(url)
content= handle.read()
bsen = bs(content)

#處理編碼問題,利用UnicodeDammit模組
print "Process the dammit strings into appropriate encodings...."
from bs4 import UnicodeDammit
dammit = UnicodeDammit(content,["utf-8","cp950"])
print "dammit strings have cleaned."

#取出Dammit物件dammit,其中屬性unicode_markup為處理完後的文字串
print "The length of dammit message is ",len(dammit.unicode_markup)
bsgood = bs(dammit.unicode_markup)
print "The links of this html have ",len(bsgood.findAll('a'))

#以for迴圈取出標籤lnktag,並使用lnktag.get('href')取出連結
for lnktag in bsgood.findAll('a',href=True):
    if lnktag.get('href').startswith('http') or lnktag.get('href').startswith(r'//'):
        print lnktag.get('href')
    


2012年11月19日 星期一

桌面環境awesome


1. 簡介

Awesome Window Manager 的目標,是做個可擴充、可高度自訂的視窗管理員。
為了達到這個目的,awesome 是設計成一個 framework window manager,極為快速、小巧、動態、且可用 Lua programming language 來擴充。

1.1. awesome 的視窗管理

awesome 的視窗管理與傳統的 x-Window-manager 不同,它是用「標籤」來作管理的。
啟動 awesome 後,畫面左上方標示著 one,two…nine,稱為標籤 (tag),one, two, three …… 等就是標籤的名稱。
「標籤」的功能乍用之下有點類似虛擬桌面 (workspace),但其實概念上是很不一樣的東西。
awesome 會給視窗加上「標籤」,當我們選擇 one 時,就代表要顯示具有 one 這個標籤的視窗。如果覺得用小小的標籤管理視窗有點不習慣,不妨將畫面左上的 tag 想成是那個 tag 的 workspace,每當我們選取了某個 tag,就代表我們要顯示那個 tag 所代表的 workspace,每當我們給某個視窗加上 tag,就代表我們將那視窗加入那個 tag 的 workspace。
在 awesome 中,我們可以透過簡單的操作,將視窗加上一或多個標籤,並決定目前螢幕上要顯示具有某個或某幾個標籤的視窗,這讓視窗的管理更具彈性。
例如,我們可以將具有 one, two, three 標籤的視窗都同時顯示在螢幕上,也可以輕易切換為只顯示 one 或 two 標籤的視窗。
也可以給某個視窗加上 one, two, three 三個標籤,如此,無論你現在顯示 one,或 two,或 three,都可以顯示這個視窗。
這些功能,其實並不稀奇,但 awesome 之所以 awesome,是因為這些視窗管理都可以透過簡單的鍵盤、滑鼠來即時操作!

1.2. awesome 版面配置的方式 (layout)

平鋪 (Tiled)使用這種版面配置時,awesome 會把視窗分成主視窗區 (master area) 與堆疊區 (stacking area),主視窗區放置我們目前比較關注的視窗,其他視窗放在堆疊區。主視窗區可切割成好幾列 (row) 與好幾欄 (column),隨你高興。
最大視野 (Max)每個視窗都調整到全螢幕。
放大 (Magnifier)焦點所在的視窗維持在畫面中央並佔用最大的空間,其餘視窗都堆疊到這個視窗後。
浮動 (Floating)可自由改變每個視窗的大小,就像一般的視窗管理員一樣。
不管使用那一種版面配置模式,對話方塊視窗總是以 floating 來處理。

1.3. awesome 的介面元素

狀態列 (Statusbar)可放在螢幕的上下左右邊緣,包含一或多個 widgets。
標題列 (Titlebar)類似狀態列,但是是在視窗的邊緣。
小工具 (Widget)在狀態列或標題列中的東西,可以文字、圖形、進度列、圖表等各種小東西顯示各種資訊。

2. 第一次用 awesome 要知道的

  • 在桌面按滑鼠右鍵,或者 Win + Enter ,可叫出 x-terminal-emulator
  • man awesome
  • man awesomerc
  • Win + 數字 可在不同標籤間切換。
  • Win + j 或 Win + k 可在視窗間切換。
  • Win + Shift + c 可關閉目前視窗。
  • Win + Shift + r 可重新啟動 awesome。

3. 不是第一次使用 awesome 要知道的

  • 用 awesome -k 來檢查設定檔的語法。

4. 預設的滑鼠按鍵功能

  • 在標籤上按 滑鼠左鍵 (Button1 on tag name)
    顯示標有此 tag 的視窗 (View tag)。
    也可想成是 - 切換到那個 tag 所代表的 workspace。
    相當於快捷鍵 Win + 標籤數字 。
  • 在某個標籤上按 Win + 滑鼠左鍵 (Mod4 + Button1 on tag name)
    替目前焦點所在的視窗加上某個標籤 (Tag current client with this tag)。
    舉例來說,假設原本目前視窗有 three 這個標籤,在 five 上按 Win + 滑鼠左鍵 後,會替視窗貼上 five 這個標籤,此時原本的標籤 three 會不見,又因目前顯示的的 tag 還是 three,所以原本視窗會不見,如要顯示原來的視窗,要改顯示 five 這個標籤。
    所以,在某個標籤上按 Win + 滑鼠左鍵 ,等於是 - 把不想看的視窗,放到其他 tag 所代表的 workspace 去的意思。
    如果完全用鍵盤快捷鍵,可用 Win + Shift + 標籤數字 。
  • 在某個標籤上 滑鼠右鍵 (Button3 on tag name)
    在目前的螢幕顯示/隱藏具有某個標籤的視窗 (Add this tag to current view)
    假如現在是在 tag three,你在 tag five 上按滑鼠右鍵,會在目前螢幕上顯示被加上 three 或 five 這兩個標籤的所有視窗。在 five 標籤上再按一次滑鼠右鍵,就會把標籤的選取狀態取消,也就是 tag five 代表的視窗又不顯示在目前螢幕上了。
    這相當於按快捷鍵 Win + Ctrl + 標籤數字 。
  • 在某個標籤上按 Win + 滑鼠右鍵 (Mod4 + Button3 on tag name)
    為焦點所在視窗加入/去除某個標籤 (Toggle this tag for client)
    這與 Win + 滑鼠左鍵 的差別在於,在某個標籤上按 Win + 滑鼠右鍵 來替焦點所在視窗加入新標籤時,仍保有原來的標籤,所以焦點所在視窗不會因為加入新標籤而消失在目前的螢幕上。
    所以 Win + 滑鼠右鍵 的使用時機,可看成是 - 想讓目前焦點所在視窗出現在其他 tag 代表的 workspaces,且還要讓這個視窗繼續出現在目前螢幕上。
    這相當於按快捷鍵 Win + Ctrl + Shift + 標籤數字 。
  • Button4, Button5 on tag name
    切換到前一個/下一個 tag。
  • 在 (layout symbol) 上按 Button1, Button3, Button4, Button5
    切換到前一個/下一個 layout。
  • 在 root window 上按 Button4, Button5
    切換到前一個/下一個 tag。
  • 在 client window 上按 Win + 滑鼠左鍵 (Mod4 + Button1)
    移動視窗。
  • 在 client window 上按 Win + 滑鼠?鍵 (Mod4 + Button2)
    Zoom 視窗。(我試不出這個功能)
  • 在 client window 上按 Win + 滑鼠右鍵 (Mod4 + Button3)
    改變視窗大小。
    實際使用時,如果視窗的管理是在 平鋪 (tiling) 的狀態,只能改變視窗的寬度。如果是在 浮動 (floating) 的狀態,就可以改變視窗的寬、高。

5. 預設的按鍵設定

awesome 提供了極豐富的快捷鍵。

5.1. 與狀態列相關

Win + F1 (Mod4 + F1)
用 awesome-menu 來讀 manual pages。
Win + F2 (Mod4 + F2)
用 awesome-menu 來執行程式。
Win + F3 (Mod4 + F3)
用 awesome-menu 來 ssh 到一台主機去。
Win + b (Mod4 + b)
開啟/關閉狀態列 (Toggle statusbar)
所謂的狀態列,就是指螢幕上方的標籤以及顯示目前開啟的視窗的地方。

5.2. 開始使用/離開/重新啟動 awesome

Win + Return (Mod4 + Return)
開啟 X terminal emulator。
Win + Shift + q (Mod4 + Shift + q)
離開 awesome (Quit awesome)。
Win + Ctrl + r (Mod4 + Control + r)
重新啟動 awesome (Restart awesome)。

5.3. 切換焦點

Win + j (Mod4 + j)
將焦點切換到下一個視窗 (Focus next client)。
Win + k (Mod4 + k)
將焦點切換到前一個視窗 (Focus previous client)。

5.4. 切換視野

Win + Left (Mod4 + Left)
看上一個標籤 (View previous tag)。
Win + Right (Mod4 + Right)
看下一個標籤 (View next tag)。
Win + 0-9 (Mod4 + 0-9)
切換到 tag 0-9 (Switch to tag 1-9, 0 for all)。0 代表顯示所有的視窗。
Win + Esc (Mod4 + Escape)
看先前選取的標籤 (View previously selected tag)。可在之前/目前所在的標籤之間切換。
Win + Control + j (Mod4 + Control + j)
將焦點切換到下一個螢幕 (Focus next screen)。
Win + Control + k (Mod4 + Control + k)
將焦點切換到上一個螢幕 (Focus previous screen)。

5.5. 移動視窗

Win + Shift + j (Mod4 + Shift + j)
將目前視窗與下一個視窗交換位置 (Switch client with next client)。
Win + Shift + l (Mod4 + Shift + k)
將目前視窗與前一個視窗交換位置 (Switch client with previous client)。

5.6. 視窗管理

Win + Shift + c (Mod4 + Shift + c)
關掉視窗 (Kill client)。
Win + Ctrl + 0-9 (Mod4 + Control + 0-9)
將標籤為 [0-9] 的視窗顯示在螢幕上 (Toggle tag view)。
可想成,要控制 (Control) 標籤為 [0-9] 的視窗 (Win)。
Win + Shift + 0-9 (Mod4 + Shift + 0-9)
給某個視窗加上標籤 (Tag client with tag)。
按下去後,視窗會消失在目前螢幕上,跑到新的標籤去,其實也就是把焦點所在的視窗搬到指定的標籤去。相當於在標籤上按 Win + 滑鼠左鍵 。
Win + Shift + Ctrl + 0-9 (Mod4 + Shift + Ctrl + 0-9)
為焦點所在視窗 加上/去掉 標籤 (Toggle tag on client)。
按下去後,視窗仍在目前螢幕上,不會消失,相當於在某個標籤上按 Win + 滑鼠右鍵 。

5.7. 切換版面配置

Win + 空白鍵 (Mod4 + space)
切換到下一個 layout。
Win + Shift + 空白鍵 (Mod4 + Shift + space)
切換到前一個 layout。

5.8. 調整版面配置區塊的大小

Win + h (Mod4 + h)
減少 主視窗區 5% 的高/寬度 (Decrease master width factor by 5%)。
Win + l (Mod4 + l)
增加 主視窗區 5% 的高/寬度 (Increase master width factor by 5%)。
Win + m (Mod4 + m)
將 client 設定成最大化 (Set client maximized)。
再按一次會回復原來大小。
Win + Ctrl + Enter (Mod4 + Control + Return)
Zoom client. (我試不出這個功能)

5.9. 調整版面配置的細節

Win + Shift + h (Mod4 + Shift + h)
增加一個 主視窗 (Increase number of master windows by 1)。
所謂 主視窗 ,依 Win + h 與 Win + l 的測試,是指多個視窗排在螢幕上時,上方或左方的完整區塊,依視窗排列方式而異,而非指佔用較大面積的視窗。預設狀態下,只有一個主視窗,此時,按 Win + h 或 Win + l 可以調整 主視窗 與 非主視窗 的大小。
Win + Shift + l (Mod4 + Shift + l)
減少一個 主視窗 (Decrease number of master windows by 1)。
Win + Ctrl + h (Mod4 + Control + h)
增加 非主視窗 的 column 數 (Increase number of columns for non-master windows by 1)
Note: 何謂 column? 這依視窗排列方式不同而異。
Win + Ctrl + l (Mod4 + Control + l)
減少 非主視窗 的 column 數 (Decrease number of columns for non-master windows by 1)
Win + Ctrl + 空白鍵 (Mod4 + Ctrl + Space)
設定視窗為浮動狀態 (Set client floating)。
也就是與一般 Window Manager 相同的視窗顯示方式,而非 Tiling 的方式。

2012年8月23日 星期四

Python and MSWord





1)安裝Active Python 
2)執行PythonWin
3)在工具列Tools > COM MakePy utility   出現清單後選擇Microsoft word 14.0 Object Library 進行build
4)開始可於PythonWin使用word物件功能

要使用Python控制MS Word,您需要先安裝win32com套件,這個套件可以到 http://sourceforge.net/projects/pywin32/ 找到。本文假設您已經正確安裝win32com及相關套件,所以將不再針對此部分多做說明。
毫無疑問的,您需要先import win32com模組才能進行Word的控制。
import win32com
from win32com.client import Dispatch, constants
接著,要讓我們的Python程式和MS Word建立起連結。
msword = Dispatch('Word.Application')
用Dispatch()的方式將會啟動MS Word。不過,如果您已經有執行MS Word,則此方式只會與現存的MS Word建立連結。如果您強烈希望能夠有一個新的MS Word程式出現,可用下面的方式:
msword = DispatchEx('Word.Application')
此時您會發現畫面上沒有任何MS Word出現,其實他已經在背後執行了。您可以透過工作管理員來查看是否有一個名為"WINWORD.EXE"的Process。不產生畫面的好處是您可 以在背景來處理您要進行的工作。如果您想要看看到底是不是真的有成功的啟動MS Word,請設定Visible屬性。
msword.Visible = 1 # 1表示要顯示畫面,若為0則不顯示畫面。您可以隨時的更改此屬性。
除了不顯示畫面外,您也許還會希望不要顯示一些警告訊息。此時請設定DisplayAlerts屬性:
msword.DisplayAlerts = 0 # 1表示要顯示訊息,0則會隱藏訊息。
若您真的有把畫面叫出來,您或許會發現此時的畫面上是沒有任何文件開啟的。沒錯!前面的動作只是幫助我們啟動Word並且建立連結,接著我們就要來開啟文件了。我們可以開啟已經存在的文件,或者是新增一個空白文件。
doc  = msword.Documents.Open(FileName="xxx.doc") # 開啟一個名為xxx.doc的文件。
newDoc  = msword.Documents.Add()   # 開啟一個新的文件。
msword.Quit()      # 關閉MS Word.
當然,除了開啟檔案或新建文件,您也可以存檔或者控制這些文件。
docCnt  = msword.Documents.Count  # 取得目前開啟文件的數量。
doc  = msword.Documents[n]   # 取得第n個文件的物件,以便後面的控制。
doc.Activate()     # 將文件設定為主要工作文件。
doc.PrintOut()     # 列印文件
doc.Save()     # 存檔
doc.SaveAs('xxx.doc')    # 另存新檔
doc.Undo(n)     # 回復前n次的動作
取得與文件的聯繫,接著我們可以對他進行編輯。不過,我們要能夠先取得編輯的控制權。透過Document的Range()函式,我們可以取得MS Word的Range物件。
range = doc.Range(0, 0) # 取得Range物件,範圍為文件的最開頭。
range = doc.Range()  # 取得Range物件,範圍為文件的最尾端。
range = doc.Range(doc.Content.Start, doc.Content.End) # 取得Range物件,範圍整份文件。
有了Range物件,我們就可以開始進行編輯了。
range.InsertBefore('在range前面插入的文字')
range.InsertAfter('在range後面插入的文字')
select = range.Select()  # 將range的範圍全部選取。並且取得Selection物件。
如果要設定Style,可以透過range物件的Style屬性來設定。
range.Style = constants.wdStyleHeading1  # 設定style為Heading 1
range.Style = constants.wdStyleHeading2  # 設定style為Heading 2
range.Style = constants.wdStyleHeading3  # 設定style為Heading 3
range.Style = constants.wdStyleHeading4  # 設定style為Heading 4
range.Style = constants.wdStyleHeading5  # 設定style為Heading 5
range.Style = constants.wdStyleHeading6  # 設定style為Heading 6
range.Style = constants.wdStyleHeading7  # 設定style為Heading 7
range.Style = constants.wdStyleHeading8  # 設定style為Heading 8
range.Style = constants.wdStyleHeading9  # 設定style為Heading 9
range.ParagraphFormat.Alignment = constants.wdAlignParagraphLeft # 設定段落為靠左
range.ParagraphFormat.Alignment = constants.wdAlignParagraphRight # 設定段落為靠右
range.ParagraphFormat.Alignment = constants.wdAlignParagraphCenter # 設定段落為置中
range.ParagraphFormat.Alignment = constants.wdAlignParagraphJustify # 設定段落為左右對齊
range.Style.Font.Name = "Arial"   # 設定字型為Arial
range.Style.Font.Name = "Time New Roman" # 設定字型為Time New Roman
range.Style.Font.Name = "標楷體"       # 設定字型為標楷體
range.Style.Font.Color = 0xFF0000  # 設定字型的顏色為Blue
range.Style.Font.Color = 0x00FF00  # 設定字型的顏色為Green
range.Style.Font.Color = 0x0000FF  # 設定字型的顏色為Red
range.Style.Font.Bold = 1   # 設定字型為粗體字
range.Style.Font.Italic = 1   # 設定字型為斜體字
range.Style.Font.Underline = 1   # 為字型加底線
range.Style.Font.Shadow = 1   # 為字型加陰影
range.Style.Font.Outline = 1   # 為字型加外框
如果要插入一個表格,可以用下面的方式來做。
table = doc.Tables.Add(range, 3, 4)   # 新增一個3x4表格
table.Cell(1,1).Range.InsertAfter('Some text')  # 新增文字到cell(1,1)
table.Cell(1,1).Range.Font.Name = "Arial"  # 設定字型為Arial
table.Cell(1,1).Range.Font.Color = 0xFF0000  # 設定字型為blue
table.Rows.Add()     # 新增一個Row
table.Columns.Add()     # 新增一個Column