Python自然语言处理学习笔记(4):1.2 进一步学习Python:将文本视作单词列表
新手上路,翻译不恰之处,恳请指出,不胜感谢
Updated log
1.2 A Closer Look at Python: Texts as Lists of Words 进一步学习Python:将文本视作单词列表
You’ve seen some important elements of the Python programming language. Let’s take a few moments to review them systematically.
Lists 列表
What is a text? At one level, it is a sequence of symbols on a page such as this one. At another level, it is a sequence of chapters, made up of a sequence of sections, where each section is a sequence of paragraphs, and so on. However, for our purposes, we will think of a text as nothing more than a sequence of words and punctuation. Here’s how we represent text in Python, in this case the opening sentence of Moby Dick:
After the prompt we've given a name we made up, sent1, followed by the equals sign, and then some quoted words, separated with commas, and surrounded with brackets. This bracketed material is known as a list in Python: it is how we store a text. We can inspect it by typing the name . We can ask for its length . We can even apply our own lexical_diversity() function to it .
['Call', 'me', 'Ishmael', '.']
>>> len(sent1) [2]
4
>>> lexical_diversity(sent1) [3]
1.0
>>>
Some more lists have been defined for you, one for the opening sentence of each of our texts, sent2 … sent9. We inspect two of them here; you can see the rest for yourself using the Python interpreter (if you get an error saying that sent2 is not defined, you need to first type from nltk.book import *).
Your Turn: Make up a few sentences of your own, by typing a name, equals sign, and a list of words, like this: ex1 = ['Monty', 'Python', 'and', 'the', 'Holy', 'Grail']. Repeat some of the other Python operations we saw earlier in Section 1.1, e.g., sorted(ex1), len(set(ex1)), ex1.count('the').
A pleasant surprise is that we can use Python’s addition operator on lists(对列表使用+操作). Adding two lists ①creates a new list with everything from the first list, followed by everything from the second list:
This special use of the addition operation is called concatenation(连结); it combines the lists together into a single list. We can concatenate sentences to build up a text(我们可以把句子连结起来组成一个文本).
We don’t have to literally(逐字的) type the lists either; we can use short names that refer to predefined lists.
What if we want to add a single item to a list(加一个元素)? This is known as appending. When we append() to a list, the list itself is updated as a result of the operation.
Indexing Lists 列表索引
As we have seen, a text in Python is a list of words, represented using a combination of brackets and quotes. Just as with an ordinary page of text, we can count up the total number of words in text1 with len(text1), and count the occurrences in a text of a particular word—say, heaven—using text1.count('heaven').
With some patience, we can pick out(挑选出) the 1st, 173rd, or even 14,278th word in a printed text. Analogously(类似的), we can identify the elements of a Python list by their order of occurrence in the list. The number that represents this position is the item’s index. We instruct Python to show us the item that occurs at an index such as 173 in a text by writing the name of the text followed by the index inside square brackets:
We can do the converse; given a word, find the index of when it first occurs:
Indexes are a common way to access the words of a text, or, more generally, the elements of any list. Python permits us to access sublists as well, extracting manageable pieces of language from large texts, a technique known as slicing(切片).
Indexes have some subtleties(微妙), and we’ll explore these with the help of an artificial sentence:
Notice that our indexes start from zero(注意我们的索引是从0开始的): sent element zero, written sent[0], is the first word, 'word1', whereas sent element 9 is 'word10'. The reason is simple: the moment Python accesses the content of a list from the computer’s memory, it is already at the first element; we have to tell it how many elements forward to go. Thus, zero steps forward leaves it at the first element.
This practice of counting from zero is initially confusing, but typical of modern programming languages. You’ll quickly get the hang of it if you’ve mastered the system of counting centuries where 19XY is a year in the 20th century, or if you live in a country where the floors of a building are numbered from 1, and so walking up n-1 flights of stairs takes you to level n.
Now, if we accidentally use an index that is too large, we get an error:
This time it is not a syntax error, because the program fragment is syntactically correct. Instead, it is a runtime error(运行时错误), and it produces a Traceback message that shows the context of the error, followed by the name of the error, IndexError, and a brief explanation.
Let' s take a closer look at slicing, using our artificial sentence again. Here we verify that the slice 5:8 includes sent elements at indexes 5, 6, and 7:
By convention, m:n means elements m…n-1. As the next example shows, we can omit the first number if the slice begins at the start of the list①, and we can omit the second number if the slice goes to the end②:
We can modify an element of a list by assigning to one of its index values. In the next example, we put sent[0] on the left of the equals sign①. We can also replace an entire slice with new material②. A consequence of this last change is that the list only has four elements, and accessing a later value generates an error③.
Your Turn: Take a few minutes to define a sentence of your own and modify individual words and groups of words (slices) using the same methods used earlier. Check your understanding by trying the exercises on lists at the end of this chapter.
关于列表的操作可以去查看:如何向科学家一样思考的chaper 9 List 或者查阅Python自带的document
Variables 变量
From the start of Section 1.1, you have had access to texts called text1, text2, and so on. It saved a lot of typing to be able to refer to a 250,000-word book with a short name like this! In general, we can make up names for anything we care to calculate. We did this ourselves in the previous sections, e.g., defining a variable sent1, as follows:
>>> sent1 = ['Call', 'me', 'Ishmael', '.']
Such lines have the form: variable = expression. Python will evaluate the expression, and save its result to the variable. This process is called assignment(赋值). It does not generate any output; you have to type the variable on a line of its own to inspect its contents. The equals sign is slightly misleading(误解的), since information is moving from the right side to the left. It might help to think of it as a left-arrow. The name of the variable can be anything you like, e.g., my_sent, sentence, xyzzy. It must start with a letter, and can include numbers and underscores. Here are some examples of variables and assignments:
Remember that capitalized words appear before lowercase words in sorted lists.(因为按ASCII码排的,大写字母的数值比小写的小)
Notice in the previous example that we split the definition of my_sent over two lines. Python expressions can be split across multiple lines, so long as this happens within any kind of brackets. Python uses the ... prompt to indicate that more input is expected. It doesn’t matter how much indentation is used in these continuation lines, but some indentation usually makes them easier to read.
It is good to choose meaningful variable names to remind you—and to help anyone else who reads your Python code—what your code is meant to do(很重要的一点). Python does not try to make sense of the names; it blindly follows your instructions, and does not object if you do something confusing, such as one = 'two' or two = 3. The only restriction is that a variable name cannot be any of Python’s reserved words(保留字), such as def, if, not, and import. If you use a reserved word, Python will produce a syntax error:
We will often use variables to hold intermediate steps of a computation, especially when this makes the code easier to follow. Thus len(set(text1)) could also be written:
Take care with your choice of names (or identifiers) for Python variables. First, you should start the name with a letter, optionally followed by digits (0 to 9) or letters. Thus, abc23 is fine, but 23abc will cause a syntax error. Names are case-sensitive, which means that myVar and myvar are distinct variables. Variable names cannot contain whitespace, but you can separate words using an underscore, e.g., my_var. Be careful not to insert a hyphen instead of an underscore: my-var is wrong, since Python interprets the - as a minus sign.
Strings 字符串
Some of the methods we used to access the elements of a list also work with individual words, or strings. For example, we can assign a string to a variable①, index a string ②, and slice a string③.
We can also perform multiplication and addition with strings:
We can join the words of a list to make a single string, or split a string into a list, as follows:
We will come back to the topic of strings in Chapter 3. For the time being, we have two important building blocks—lists and strings—and are ready to get back to some language analysis.