AI自然语言处理NLP原理与Python实战:30. 语言资源构建与标注

100 阅读13分钟

1.背景介绍

自然语言处理(NLP)是人工智能(AI)领域的一个重要分支,其主要目标是让计算机理解、生成和处理人类语言。语言资源构建与标注是NLP的一个关键环节,它涉及到数据的收集、预处理、标注和存储等方面。在本文中,我们将深入探讨语言资源构建与标注的核心概念、算法原理、具体操作步骤以及数学模型公式。同时,我们还将通过具体的Python代码实例来详细解释这些概念和方法。最后,我们将讨论未来的发展趋势和挑战。

2.核心概念与联系

2.1 语言资源

语言资源是NLP系统的基础,它们包括文本、语音、词汇、语法规则等。语言资源可以分为两类:一类是自然语言本身,如文本、语音等;另一类是人工制定的语言规范,如词汇、语法规则等。语言资源的构建与标注是NLP系统的关键环节,它们为NLP系统提供了基础的语言信息,使得系统可以理解、生成和处理人类语言。

2.2 语言标注

语言标注是对语言资源进行加工的过程,主要包括以下几种:

  • 词性标注:将文本中的每个词语标记为一个词性,如名词、动词、形容词等。
  • 命名实体标注:将文本中的命名实体标记为特定的类别,如人名、地名、组织名等。
  • 依存关系标注:将文本中的每个词语与其他词语之间的依存关系标记出来。
  • 语义标注:将文本中的每个词语或短语标记为其语义含义,如意义、概念等。

语言标注是NLP系统的一个关键环节,它可以帮助系统理解文本的结构和语义,从而实现更高级的语言处理任务。

3.核心算法原理和具体操作步骤以及数学模型公式详细讲解

3.1 词性标注

3.1.1 算法原理

词性标注是将文本中的每个词语标记为一个词性的过程。常用的词性标注算法有规则基础算法、统计基础算法和深度学习基础算法等。

规则基础算法是根据自然语言的语法规则来标注词性的。这种方法的优点是简单易用,但其缺点是不能处理复杂的语言现象。

统计基础算法是根据文本中词语与词性之间的统计关系来标注词性的。这种方法的优点是可以处理复杂的语言现象,但其缺点是需要大量的训练数据。

深度学习基础算法是利用深度学习模型来预测词性的。这种方法的优点是可以处理复杂的语言现象,并且不需要大量的训练数据。

3.1.2 具体操作步骤

  1. 收集文本数据:首先需要收集一些标注好的文本数据,以便于训练和测试算法。
  2. 预处理文本数据:对文本数据进行预处理,包括去除标点符号、小写转换等。
  3. 训练算法:根据选定的算法,对文本数据进行训练。
  4. 测试算法:对训练好的算法进行测试,并计算其准确率、召回率等指标。
  5. 应用算法:将测试好的算法应用于新的文本数据,实现词性标注。

3.1.3 数学模型公式

对于统计基础算法,我们可以使用贝叶斯定理来计算词性概率。贝叶斯定理的公式为:

P(YX)=P(XY)P(Y)P(X)P(Y|X) = \frac{P(X|Y) * P(Y)}{P(X)}

其中,P(YX)P(Y|X) 是给定词语XX的词性YY的概率,P(XY)P(X|Y) 是给定词性YY的词语XX的概率,P(Y)P(Y) 是词性YY的概率,P(X)P(X) 是所有词语的概率。

3.2 命名实体标注

3.2.1 算法原理

命名实体标注是将文本中的命名实体标记为特定的类别的过程。常用的命名实体标注算法有规则基础算法、统计基础算法和深度学习基础算法等。

规则基础算法是根据自然语言的语法规则来标注命名实体的。这种方法的优点是简单易用,但其缺点是不能处理复杂的语言现象。

统计基础算法是根据文本中命名实体与类别之间的统计关系来标注命名实体的。这种方法的优点是可以处理复杂的语言现象,但其缺点是需要大量的训练数据。

深度学习基础算法是利用深度学习模型来预测命名实体的。这种方法的优点是可以处理复杂的语言现象,并且不需要大量的训练数据。

3.2.2 具体操作步骤

  1. 收集文本数据:首先需要收集一些标注好的文本数据,以便于训练和测试算法。
  2. 预处理文本数据:对文本数据进行预处理,包括去除标点符号、小写转换等。
  3. 训练算法:根据选定的算法,对文本数据进行训练。
  4. 测试算法:对训练好的算法进行测试,并计算其准确率、召回率等指标。
  5. 应用算法:将测试好的算法应用于新的文本数据,实现命名实体标注。

3.2.3 数学模型公式

对于统计基础算法,我们可以使用贝叶斯定理来计算命名实体概率。贝叶斯定理的公式为:

P(YX)=P(XY)P(Y)P(X)P(Y|X) = \frac{P(X|Y) * P(Y)}{P(X)}

其中,P(YX)P(Y|X) 是给定词语XX的命名实体YY的概率,P(XY)P(X|Y) 是给定命名实体YY的词语XX的概率,P(Y)P(Y) 是命名实体YY的概率,P(X)P(X) 是所有词语的概率。

3.3 依存关系标注

3.3.1 算法原理

依存关系标注是将文本中的每个词语与其他词语之间的依存关系标记出来的过程。常用的依存关系标注算法有规则基础算法、统计基础算法和深度学习基础算法等。

规则基础算法是根据自然语言的语法规则来标注依存关系的。这种方法的优点是简单易用,但其缺点是不能处理复杂的语言现象。

统计基础算法是根据文本中词语与依存关系之间的统计关系来标注依存关系的。这种方法的优点是可以处理复杂的语言现象,但其缺点是需要大量的训练数据。

深度学习基础算法是利用深度学习模型来预测依存关系的。这种方法的优点是可以处理复杂的语言现象,并且不需要大量的训练数据。

3.3.2 具体操作步骤

  1. 收集文本数据:首先需要收集一些标注好的文本数据,以便于训练和测试算法。
  2. 预处理文本数据:对文本数据进行预处理,包括去除标点符号、小写转换等。
  3. 训练算法:根据选定的算法,对文本数据进行训练。
  4. 测试算法:对训练好的算法进行测试,并计算其准确率、召回率等指标。
  5. 应用算法:将测试好的算法应用于新的文本数据,实现依存关系标注。

3.3.3 数学模型公式

对于统计基础算法,我们可以使用贝叶斯定理来计算依存关系概率。贝叶斯定理的公式为:

P(YX)=P(XY)P(Y)P(X)P(Y|X) = \frac{P(X|Y) * P(Y)}{P(X)}

其中,P(YX)P(Y|X) 是给定词语XX的依存关系YY的概率,P(XY)P(X|Y) 是给定依存关系YY的词语XX的概率,P(Y)P(Y) 是依存关系YY的概率,P(X)P(X) 是所有词语的概率。

4.具体代码实例和详细解释说明

在本节中,我们将通过具体的Python代码实例来详细解释上述算法原理和操作步骤。

4.1 词性标注

4.1.1 使用NLTK库进行词性标注

NLTK是一个自然语言处理库,它提供了许多自然语言处理任务的实现,包括词性标注。我们可以使用NLTK库来进行词性标注。

import nltk
from nltk.corpus import brown

# 加载brown文本数据
brown_tagged_sents = brown.tagged_sents(categories=['news'])

# 对文本数据进行预处理
def preprocess(sentence):
    return ' '.join(word.lower() for word in sentence.split())

# 对文本数据进行词性标注
def pos_tagging(sentence):
    return ' '.join(tag for word, tag in nltk.pos_tag(preprocess(sentence).split()))

# 测试
sentence = "I love you."
print(pos_tagging(sentence))

4.1.2 使用spaCy库进行词性标注

spaCy是一个强大的自然语言处理库,它提供了许多自然语言处理任务的实现,包括词性标注。我们可以使用spaCy库来进行词性标注。

import spacy

# 加载spaCy模型
nlp = spacy.load("en_core_web_sm")

# 对文本数据进行预处理
def preprocess(sentence):
    return ' '.join(word.lower() for word in sentence.split())

# 对文本数据进行词性标注
def pos_tagging(sentence):
    doc = nlp(preprocess(sentence))
    return ' '.join([token.pos_ for token in doc])

# 测试
sentence = "I love you."
print(pos_tagging(sentence))

4.1.3 使用Stanford NLP库进行词性标注

Stanford NLP是一个强大的自然语言处理库,它提供了许多自然语言处理任务的实现,包括词性标注。我们可以使用Stanford NLP库来进行词性标注。

from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer

# 加载Stanford NLP模型
import stanfordnlp

# 对文本数据进行预处理
def preprocess(sentence):
    return ' '.join(word.lower() for word in sentence.split())

# 对文本数据进行词性标注
def pos_tagging(sentence):
    tokens = word_tokenize(preprocess(sentence))
    tagged = nltk.pos_tag(tokens)
    return ' '.join([tag for word, tag in tagged])

# 测试
sentence = "I love you."
print(pos_tagging(sentence))

4.2 命名实体标注

4.2.1 使用NLTK库进行命名实体标注

我们可以使用NLTK库来进行命名实体标注。

import nltk
from nltk.tokenize import word_tokenize
from nltk.tag import pos_tag
from nltk.chunk import ne_chunk

# 加载brown文本数据
brown_tagged_sents = brown.tagged_sents(categories=['news'])

# 对文本数据进行预处理
def preprocess(sentence):
    return ' '.join(word.lower() for word in sentence.split())

# 对文本数据进行命名实体标注
def named_entity_recognition(sentence):
    return ' '.join(word for word, tag in ne_chunk(pos_tag(preprocess(sentence).split())))

# 测试
sentence = "I love you."
print(named_entity_recognition(sentence))

4.2.2 使用spaCy库进行命名实体标注

我们可以使用spaCy库来进行命名实体标注。

import spacy

# 加载spaCy模型
nlp = spacy.load("en_core_web_sm")

# 对文本数据进行预处理
def preprocess(sentence):
    return ' '.join(word.lower() for word in sentence.split())

# 对文本数据进行命名实体标注
def named_entity_recognition(sentence):
    doc = nlp(preprocess(sentence))
    return ' '.join([ent.text for ent in doc.ents])

# 测试
sentence = "I love you."
print(named_entity_recognition(sentence))

4.2.3 使用Stanford NLP库进行命名实体标注

我们可以使用Stanford NLP库来进行命名实体标注。

from nltk.tokenize import word_tokenize
from nltk.corpus import wordnet
from nltk.corpus import stopwords
from nltk.stem import WordNetLemmatizer

# 加载Stanford NLP模型
import stanfordnlp

# 对文本数据进行预处理
def preprocess(sentence):
    return ' '.join(word.lower() for word in sentence.split())

# 对文本数据进行命名实体标注
def named_entity_recognition(sentence):
    tokens = word_tokenize(preprocess(sentence))
    tagged = nltk.pos_tag(tokens)
    named_entities = []
    for i in range(len(tagged)):
        if tagged[i][1] in ['NNP', 'NNPS', 'NNP', 'NNPS', 'JJ', 'NN', 'NNS', 'VB', 'VBD', 'VBG', 'VBN', 'VBP', 'VBZ', 'WP', 'WP$', 'WRB', 'WDT', 'PDT', 'UH', 'TO', 'IN', 'DT', 'CD', 'POS', 'PRP', 'PRP$', 'JJS', 'RB', 'RBR', 'RBS', 'CC', 'RB', 'VBG', 'VBN', 'VBP', 'VBZ', 'JJ', 'NN', 'NNS', 'NNP', 'NNPS', 'PDT', 'POS', 'PRP', 'PRP$', 'RB', 'RBR', 'RBS', 'WRB', 'WDT', 'WP', 'WP$', 'WP', 'WP$', 'WP', 'WP', 'WP$', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', 'WP', '