Browse Source

解决冲突

zfrr 2 months ago
parent
commit
daf4d751e9

+ 109 - 0
final/ByRules/LSTM/LSTM.py

@@ -0,0 +1,109 @@
+import torch
+import torch.nn as nn
+import torch.optim as optim
+from sklearn.model_selection import train_test_split
+from collections import defaultdict
+import numpy as np
+from tqdm import tqdm
+
+# 1. 数据读取
+def load_data(filename):
+    sentences, labels = [], []
+    sentence, label = [], []
+    with open(filename, encoding='utf-8') as f:
+        for line in f:
+            if line.strip() == "":
+                if sentence:
+                    sentences.append(sentence)
+                    labels.append(label)
+                    sentence, label = [], []
+            else:
+                char, tag = line.strip().split()
+                sentence.append(char)
+                label.append(tag)
+    if sentence:  # 最后一条
+        sentences.append(sentence)
+        labels.append(label)
+    return sentences, labels
+
+sentences, labels = load_data('data.txt')
+
+# 2. 构建词表 & 标签表
+word2idx = {'PAD': 0, 'UNK': 1}
+tag2idx = {'PAD':0, 'B-TIME':1, 'I-TIME':2, 'O':3}  # 手动加PAD
+for s in sentences:
+    for word in s:
+        if word not in word2idx:
+            word2idx[word] = len(word2idx)
+
+idx2tag = {v: k for k, v in tag2idx.items()}
+
+# 3. 数据编码
+def encode(sentences, labels, max_len=32):
+    X, Y = [], []
+    for s, l in zip(sentences, labels):
+        x = [word2idx.get(w, word2idx['UNK']) for w in s]
+        y = [tag2idx.get(t, tag2idx['O']) for t in l]
+        x = x + [word2idx['PAD']] * (max_len - len(x))
+        y = y + [tag2idx['PAD']] * (max_len - len(y))
+        X.append(x[:max_len])
+        Y.append(y[:max_len])
+    return torch.LongTensor(X), torch.LongTensor(Y)
+
+X, Y = encode(sentences, labels)
+# 划分训练集,训练比验证 = 8:2
+X_train, X_val, Y_train, Y_val = train_test_split(X, Y, test_size=0.2)
+
+# 4. LSTM模型
+class NERLSTM(nn.Module):
+    def __init__(self, vocab_size, embed_dim, hidden_dim, tag_size):
+        super(NERLSTM, self).__init__()
+        self.embedding = nn.Embedding(vocab_size, embed_dim, padding_idx=word2idx['PAD'])
+        self.lstm = nn.LSTM(embed_dim, hidden_dim, batch_first=True, bidirectional=True)
+        self.fc = nn.Linear(hidden_dim * 2, tag_size)
+
+    def forward(self, x):
+        x = self.embedding(x)
+        x, _ = self.lstm(x)
+        x = self.fc(x)
+        return x  # [batch_size, seq_len, tag_size]
+
+# 5. 训练配置
+model = NERLSTM(len(word2idx), embed_dim=64, hidden_dim=128, tag_size=len(tag2idx))
+criterion = nn.CrossEntropyLoss(ignore_index=tag2idx['PAD'])  # PAD忽略
+optimizer = optim.Adam(model.parameters(), lr=0.0005)
+
+# 6. 训练
+epochs = 5
+for epoch in range(epochs):
+    model.train()
+    total_loss = 0
+    for i in range(len(X_train)):
+        x_batch = X_train[i].unsqueeze(0)
+        y_batch = Y_train[i].unsqueeze(0)
+        output = model(x_batch)
+        loss = criterion(output.view(-1, len(tag2idx)), y_batch.view(-1))
+
+        optimizer.zero_grad()
+        loss.backward()
+        torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm=5.0)  # 防梯度爆炸
+        optimizer.step()
+        total_loss += loss.item()
+    print(f"Epoch {epoch + 1}, Loss: {total_loss / len(X_train):.4f}")
+
+# 7. 推理
+def predict(sentence):
+    model.eval()
+    s = [word2idx.get(w, word2idx['UNK']) for w in sentence]
+    s = s + [word2idx['PAD']] * (32 - len(s))
+    input_tensor = torch.LongTensor([s[:32]])  # 取32以内
+    with torch.no_grad():
+        output = model(input_tensor)
+        pred = torch.argmax(output, dim=2).squeeze(0)
+    return [idx2tag[i.item()] for i in pred[:len(sentence)]]  # 只取实际句长
+
+# 8. 测试
+test_sentence = list("2024年12月省间交易电量是多少?")
+result = predict(test_sentence)
+for w, t in zip(test_sentence, result):
+    print(f"{w} => {t}")

+ 4184 - 0
final/ByRules/LSTM/data.txt

@@ -0,0 +1,4184 @@
+近 O
+5 O
+年 O
+浙 O
+江 O
+交 O
+易 O
+电 O
+量 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+四 O
+川 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+全 O
+年 O
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+近 O
+5 O
+年 O
+山 O
+东 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+3 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+四 O
+川 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+浙 O
+江 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+全 O
+年 O
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+近 O
+3 O
+年 O
+山 O
+东 O
+均 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+近 O
+3 O
+年 O
+浙 O
+江 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+购 O
+送 O
+差 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+近 O
+5 O
+年 O
+广 O
+东 O
+均 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+近 O
+4 O
+年 O
+山 O
+东 O
+均 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+江 O
+苏 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+近 O
+5 O
+年 O
+江 O
+苏 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+近 O
+4 O
+年 O
+江 O
+苏 O
+交 O
+易 O
+电 O
+量 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+交 O
+易 O
+电 O
+量 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+1 B-TIME
+2 I-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+交 O
+易 O
+电 O
+量 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+1 B-TIME
+2 I-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+近 O
+3 O
+年 O
+山 O
+东 O
+均 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+近 O
+4 O
+年 O
+广 O
+东 O
+交 O
+易 O
+电 O
+量 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+近 O
+3 O
+年 O
+江 O
+苏 O
+交 O
+易 O
+电 O
+量 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+近 O
+3 O
+年 O
+江 O
+苏 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+近 O
+3 O
+年 O
+四 O
+川 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+近 O
+4 O
+年 O
+浙 O
+江 O
+均 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+近 O
+4 O
+年 O
+四 O
+川 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+1 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+购 O
+送 O
+差 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+四 O
+川 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+全 O
+年 O
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+江 O
+苏 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+广 O
+东 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+近 O
+5 O
+年 O
+四 O
+川 O
+交 O
+易 O
+电 O
+量 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+近 O
+4 O
+年 O
+江 O
+苏 O
+交 O
+易 O
+电 O
+量 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+广 O
+东 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+全 O
+年 O
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+购 O
+送 O
+差 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+交 O
+易 O
+电 O
+量 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+近 O
+5 O
+年 O
+江 O
+苏 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+近 O
+5 O
+年 O
+山 O
+东 O
+交 O
+易 O
+电 O
+量 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+交 O
+易 O
+电 O
+量 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+近 O
+5 O
+年 O
+浙 O
+江 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+浙 O
+江 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+全 O
+年 O
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+购 O
+送 O
+差 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+近 O
+5 O
+年 O
+山 O
+东 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+四 O
+川 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+近 O
+3 O
+年 O
+广 O
+东 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+近 O
+3 O
+年 O
+江 O
+苏 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+山 O
+东 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+浙 O
+江 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+全 O
+年 O
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+购 O
+送 O
+差 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+近 O
+5 O
+年 O
+广 O
+东 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+均 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+近 O
+4 O
+年 O
+四 O
+川 O
+均 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+四 O
+川 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+近 O
+3 O
+年 O
+浙 O
+江 O
+购 O
+送 O
+差 O
+价 O
+走 O
+势 O
+是 O
+怎 O
+样 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+广 O
+东 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+四 O
+川 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+全 O
+年 O
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+购 O
+送 O
+差 O
+价 O
+预 O
+计 O
+已 O
+成 O
+交 O
+未 O
+结 O
+算 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+山 O
+东 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+全 O
+年 O
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+浙 O
+江 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+全 O
+年 O
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+1 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+均 O
+价 O
+是 O
+变 O
+化 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+情 O
+况 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+9 B-TIME
+月 I-TIME
+交 O
+易 O
+电 O
+量 O
+是 O
+走 O
+势 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+2 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+3 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+1 B-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+多 O
+少 O
+? O
+
+2 B-TIME
+0 I-TIME
+2 I-TIME
+3 I-TIME
+年 I-TIME
+6 B-TIME
+月 I-TIME
+至 O
+2 B-TIME
+0 I-TIME
+2 I-TIME
+4 I-TIME
+年 I-TIME
+1 B-TIME
+2 I-TIME
+月 I-TIME
+购 O
+送 O
+差 O
+价 O
+是 O
+变 O
+化 O
+? O
+

+ 84 - 0
final/ByRules/LSTM/generate_data.py

@@ -0,0 +1,84 @@
+import random
+
+# 样本词汇
+years = ['2022年', '2023年', '2024年']
+months = ['1月', '3月', '6月', '9月', '12月']
+provinces = ['广东', '江苏', '浙江', '四川', '山东']
+indicators = ['交易电量', '均价', '购送差价']
+calc_words = ['多少', '情况', '变化', '走势']
+others = ['是', '的', '?', '与', '相比', '增加', '降低', '预计', '未结算', '已成交', '完成']
+
+def ner_tag_time(word):
+    """只标注时间实体(TIME),其他全O"""
+    if len(word) == 1:
+        return [(word, 'B-TIME')]
+    else:
+        return [(word[0], 'B-TIME')] + [(w, 'I-TIME') for w in word[1:]]
+
+def generate_cross_year_sentence():
+    """生成跨年跨月时间句子,仅标注TIME"""
+    year1 = random.choice(years)
+    year2 = random.choice(years)
+    while year2 == year1:  # 确保跨年
+        year2 = random.choice(years)
+    month1 = random.choice(months)
+    month2 = random.choice(months)
+    indicator = random.choice(indicators)
+    calc = random.choice(calc_words)
+
+    sentence = []
+    sentence.extend(ner_tag_time(year1))
+    sentence.extend(ner_tag_time(month1))
+    sentence.append(('至', 'O'))
+    sentence.extend(ner_tag_time(year2))
+    sentence.extend(ner_tag_time(month2))
+
+    # 其他非时间实体全部标O
+    other_words = list(indicator) + ['是'] + list(calc) + ['?']
+    for word in other_words:
+        sentence.append((word, 'O'))
+
+    return sentence
+
+def generate_sentence():
+    """生成普通模板句子,仅标注TIME"""
+    year = random.choice(years)
+    month = random.choice(months)
+    prov = random.choice(provinces)
+    indicator = random.choice(indicators)
+    calc = random.choice(calc_words)
+
+    structure = random.choice([
+        [year, month, indicator, '是', calc, '?'],
+        [prov, year, '全年', indicator, '是', calc, '?'],
+        [year, indicator, '预计', '已成交', '未结算', '电量', '是', calc, '?'],
+        [year, month, '至', month, indicator, '是', calc, '?'],
+        ['近', str(random.randint(3,5))+'年', prov, indicator, '走势', '是', '怎样', '?']
+    ])
+
+    sentence = []
+    for token in structure:
+        if token in years:
+            sentence.extend(ner_tag_time(token))
+        elif token in months:
+            sentence.extend(ner_tag_time(token))
+        else:  # 其他全标O
+            for char in token:
+                sentence.append((char, 'O'))
+
+    return sentence
+
+# 生成并保存 data.txt
+with open('data.txt', 'w', encoding='utf-8') as f:
+    for _ in range(100):  # 100条普通样本
+        sent = generate_sentence()
+        for word, label in sent:
+            f.write(f"{word} {label}\n")
+        f.write('\n')  # 句子间空行
+    for _ in range(100):  # 100条跨年样本
+        sent = generate_cross_year_sentence()
+        for word, label in sent:
+            f.write(f"{word} {label}\n")
+        f.write('\n')
+
+print("✅ 仅标注TIME实体的 data.txt 已生成,共200条样本。")

BIN
final/ByRules/__pycache__/extract_by_am.cpython-39.pyc


BIN
final/ByRules/__pycache__/similarity_answer_json.cpython-39.pyc


+ 6 - 1
final/ByRules/app.py

@@ -4,6 +4,7 @@ from flask import Flask, request, jsonify
 
 from commonUtil import fill_template, fill_template_auto
 from responseUtil import *
+from final.ByRules.extract_by_am import EntityExtractor
 from similarity_answer_json import *
 from util import *
 import os
@@ -45,7 +46,11 @@ def process_query_route():
         # return jsonify({"error": "Query cannot be empty"}), 400
         return jsonify(error_response("Query cannot be empty"))
     try:
-        result = process_query(query, template_dict, TEMPLATE_FOLDER)
+        # 按照模板匹配的方法
+        # result = process_query(query, template_dict, TEMPLATE_FOLDER)
+        # 按照自动机提取模板的方式进行匹配
+        extractor = EntityExtractor()
+        result = extractor.extract(query)
 
         #  如果没有该问题模板
         if result['play'] == '疑问':

+ 215 - 0
final/ByRules/extract_by_am.py

@@ -0,0 +1,215 @@
+import json
+import os
+import re
+
+from final.ByRules.similarity_answer_json import load_template_info
+
+
+class EntityExtractor:
+    def __init__(self):
+        self.entity_patterns = {
+            "time": [
+                r'\d{4}年\d{1,2}月到\d{4}年\d{1,2}月',
+                r'\d{4}年\d{1,2}月到\d{1,2}月',
+                r'\d{4}年\d{1,2}月',
+                r'\d{4}年',
+                r'\d{1,2}月',
+                r'去年|今年|前年|明年|上个月|本月|上季度|下季度',
+                r'过去\d+年|过去\d+个月|近\d+年|近\d+个月'
+            ],
+            "market": ["山东省", "河南省", "山西省", "江苏省"],
+            "indicator": {
+                "1": "累计省间交易电量",
+                "2": "交易电量",
+            },
+            "calculation": ["累计", "均值", "是多少", "有多少"],
+            "constraint": [
+                r'最高|最低|超过|低于|不少于',
+                r'第[零一二三四五六七八九十百千万\d]+名到第[零一二三四五六七八九十百千万\d]+名',
+                r'第[零一二三四五六七八九十百千万\d]+名',
+                r'前[零一二三四五六七八九十百千万\d]+名'
+            ]
+        }
+        self.states = ["time", "market", "indicator", "calculation", "constraint"]
+
+        # 这里取出 indicator 字典的所有指标名,方便匹配
+        self.indicator_dict = self.entity_patterns["indicator"]
+        self.indicator_list = list(self.indicator_dict.values())
+
+    def extract(self, text):
+        # 用question来保留问句
+        question = text
+        extracted_entities = {state: [] for state in self.states}
+
+        for state in self.states:
+            # indicator 不用按正则匹配,单独处理
+            if state == "indicator":
+                matched_indicators = []
+                for indicator_name in self.indicator_list:
+                    if indicator_name in text:
+                        matched_indicators.append(indicator_name)
+                        text = text.replace(indicator_name, "")  # 去掉已匹配,防止重复匹配
+                extracted_entities[state] = matched_indicators
+            else:
+                patterns = self.entity_patterns[state]
+                for pattern in patterns:
+                    matches = re.findall(pattern, text)
+                    if matches:
+                        extracted_entities[state].extend(matches)
+                        for match in matches:
+                            text = text.replace(match, "")
+
+        conditions = {}
+        # 时间实体处理
+        extracted_entities["time"] = self._process_time_entities(extracted_entities["time"])
+        time_entity = extracted_entities["time"]
+
+        # 如果是list,取第一个元素
+        if isinstance(time_entity, list):
+            ti = time_entity[0]
+        else:
+            ti = time_entity
+
+        # 处理具体时间字段
+        if 'start_year' in ti and 'end_year' in ti:
+            conditions['start_year'] = ti.get('start_year')
+            conditions['start_month'] = ti.get('start_month')
+            conditions['end_year'] = ti.get('end_year')
+            conditions['end_month'] = ti.get('end_month')
+        else:
+            if 'year' in ti:
+                conditions['年'] = ti['year']
+            if 'month' in ti:
+                conditions['月'] = ti['month']
+
+        # 指标实体处理,转换为 key: name 字典形式
+        extracted_entities["indicator"] = self._process_indicator_entities(extracted_entities["indicator"])
+        print(extracted_entities["indicator"])
+        # 获取序列号
+        keys = extracted_entities["indicator"].keys()
+        keys_list = list(keys)
+        key = keys_list[0]
+        print(key)
+        # 获取templatesJson中的数据
+        json_folder = "templatesJson"
+        template_info = load_template_info(key, json_folder)
+        keywords = template_info.get("keyword")
+        target = template_info.get("target")
+        type_ = template_info.get("type", "")
+        dataJsonName = template_info.get("dataJsonName", "")
+        value_key = template_info.get("value_key", "")
+        name_key = template_info.get("name_key", "")
+        find_max = template_info.get("find_max")
+        name = template_info.get("name", "")
+        content = template_info.get("content", "")
+        play = template_info.get("play", "")
+        qcode = template_info.get("qcode", "")
+        unit = template_info.get("unit", "")
+        flag = template_info.get("flag", "")
+
+        return {
+            "type": type_,
+            "keywords": keywords,
+            "target": target,
+            "dataJsonName": dataJsonName,
+            "name": name,
+            "conditions": conditions,
+            "content": content,
+            "query": question,
+            "play": play,
+            "find_max": find_max,
+            "value_key": value_key,
+            "name_key": name_key,
+            "qcode": qcode,
+            "unit": unit,
+            "flag": flag
+        }
+
+
+        return extracted_entities
+
+    def _process_time_entities(self, time_entities):
+        conditions = []
+        for time_str in time_entities:
+            if re.match(r'\d{4}年\d{1,2}月到\d{4}年\d{1,2}月', time_str):
+                m = re.match(r'(\d{4})年(\d{1,2})月到(\d{4})年(\d{1,2})月', time_str)
+                if m:
+                    conditions.append({
+                        "start_year": int(m.group(1)),
+                        "start_month": int(m.group(2)),
+                        "end_year": int(m.group(3)),
+                        "end_month": int(m.group(4))
+                    })
+            elif re.match(r'\d{4}年\d{1,2}月到\d{1,2}月', time_str):
+                m = re.match(r'(\d{4})年(\d{1,2})月到(\d{1,2})月', time_str)
+                if m:
+                    conditions.append({
+                        "start_year": int(m.group(1)),
+                        "start_month": int(m.group(2)),
+                        "end_year": int(m.group(1)),  # 同年
+                        "end_month": int(m.group(3))
+                    })
+            elif re.match(r'\d{4}年\d{1,2}月', time_str):
+                m = re.match(r'(\d{4})年(\d{1,2})月', time_str)
+                if m:
+                    conditions.append({
+                        "year": int(m.group(1)),
+                        "month": int(m.group(2))
+                    })
+            elif re.match(r'\d{4}年', time_str):
+                m = re.match(r'(\d{4})年', time_str)
+                if m:
+                    conditions.append({
+                        "year": int(m.group(1))
+                    })
+            elif re.match(r'\d{1,2}月', time_str):
+                m = re.match(r'(\d{1,2})月', time_str)
+                if m:
+                    conditions.append({
+                        "month": int(m.group(1))
+                    })
+            else:
+                conditions.append({"text": time_str})
+
+        # 如果只提取到一个时间实体,直接返回字典,否则返回列表
+        if len(conditions) == 1:
+            return conditions[0]
+        else:
+            return conditions
+
+    def _process_indicator_entities(self, indicators):
+        # 返回 key: indicator_name 字典
+        # 根据已匹配的指标名称反查 key
+        result = {}
+        for indicator in indicators:
+            for key, name in self.indicator_dict.items():
+                if name == indicator:
+                    result[key] = name
+                    break
+        return result
+
+
+# ==== 测试 ====
+extractor = EntityExtractor()
+# # question = "请问2023年5月到2024年3月、2024年5月山东省、河南省的交易电量累计是多少?"
+# # question = "2024年全年累计省间交易电量是多少??"
+# question = "2023年12月交易电量是多少?"
+# question = "2024年1月到3月累计交易电量是多少?"
+question = "2023年省间交易电量按交易周期划分的电量是多少?"
+# # question = "2023年省间交易电量年度交易电量是多少?"
+# # question = "今年哪个省火电送出电量最多?分别是多少?"
+# # question = "哪个省送出电量最高?是多少?"
+# # question = "省间交易正在组织的交易有多少?"
+# # question = "2024年送出电量前十名的省份是?"
+#
+result = extractor.extract(question)
+
+print("类型:", result["type"])
+print("关键词:", result["keywords"])
+print("查询字段:", result["target"])
+print("模型名字", result["name"])
+print("条件", result["conditions"])
+print("返回的内容是:", result["content"])
+print("问句是:", result["query"])
+print("动作是:", result["play"])
+print("描述:", result["content"])

+ 119 - 0
final/ByRules/extract_by_am_copy.py

@@ -0,0 +1,119 @@
+import json
+import os
+import re
+
+from final.ByRules.similarity_answer_json import load_template_info
+
+
+class EntityExtractor:
+    def __init__(self):
+        self.entity_patterns = {
+            "time": [
+                r'\d{4}年\d{1,2}月到\d{4}年\d{1,2}月',  # 2023年5月到2024年3月
+                r'\d{4}年\d{1,2}月到\d{1,2}月',        # 2023年5月到6月
+                r'\d{4}年\d{1,2}月',                 # 2023年5月
+                r'\d{4}年',                          # 2023年
+                r'\d{1,2}月',                        # 5月
+                r'去年|今年|前年|明年|上个月|本月|上季度|下季度',
+                r'过去\d+年|过去\d+个月|近\d+年|近\d+个月'
+            ],
+            "market": ["山东省", "河南省", "山西省", "江苏省"],
+            "indicator": ["火电送出电量","按交易周期划分", "按交易类型划分", "按发电类型划分", "按交易方式划分","年度交易","送出电量", "受入电量","累计省间交易电量", "交易电量", "正在组织的交易"],
+            "calculation": ["累计", "均值", "是多少", "有多少"],
+            "constraint": [
+                r'最高|最低|超过|低于|不少于',
+                r'第[零一二三四五六七八九十百千万\d]+名到第[零一二三四五六七八九十百千万\d]+名',  # 第1名到第3名、第一名到第三名
+                r'第[零一二三四五六七八九十百千万\d]+名',  # 第1名、第一名
+                r'前[零一二三四五六七八九十百千万\d]+名'  # 前5名、前五名
+            ]
+        }
+        self.states = ["time", "market", "indicator", "calculation", "constraint"]
+
+    def normalize_time(self, item):
+        # 处理"某年某月到某年某月"
+        if re.match(r'\d{4}年\d{1,2}月到\d{4}年\d{1,2}月', item):
+            return "某年某月到某年某月"
+        # 处理"某年某月到某月"
+        elif re.match(r'\d{4}年\d{1,2}月到\d{1,2}月', item):
+            return "某年某月到某月"
+        # 处理"某年某月"
+        elif re.match(r'\d{4}年\d{1,2}月', item):
+            return "某年某月"
+        # 处理"某年"
+        elif re.match(r'\d{4}年', item):
+            return "某年"
+        # 处理"某月"
+        elif re.match(r'\d{1,2}月', item):
+            return "某月"
+
+    def extract(self, text):
+        extracted_entities = {state: [] for state in self.states}
+        state_index = 0
+
+        while state_index < len(self.states):
+            state = self.states[state_index]
+            patterns = self.entity_patterns[state]
+
+            for pattern in patterns:
+                matches = re.findall(pattern, text)
+                if matches:
+                    extracted_entities[state].extend(matches)
+                    for match in matches:
+                        text = text.replace(match, "")
+
+            state_index += 1
+
+        # 结果归一化处理
+        final_list = []
+        for state in self.states:
+            for item in extracted_entities[state]:
+                if state == "time":
+                    final_list.append(self.normalize_time(item))
+                elif state == "market":
+                    final_list.append("某省")
+                else:
+                    final_list.append(item)
+
+        best_template = match_template(final_list, template_dict)
+        print("最接近模板ID:", best_template)
+        return final_list
+
+
+def calculate_similarity(list1, list2):
+    return len(set(list1) & set(list2))
+
+
+def match_template(extracted_list, template_dict):
+    max_similarity = -1
+    best_template_id = None
+
+    for template_id, template in template_dict.items():
+        similarity = calculate_similarity(extracted_list, template)
+        if similarity > max_similarity:
+            max_similarity = similarity
+            best_template_id = template_id
+
+    return best_template_id
+
+# 定义问题模板
+template_dict = {
+    "1": ["某年","累计省间交易电量","是多少"],
+    "2": ["某年","累计省间交易电量","是多少"],
+}
+
+# ==== 测试 ====
+extractor = EntityExtractor()
+# question = "请问2023年5月到2024年3月、2024年5月山东省、河南省的交易电量累计是多少啊?"
+# question = "2024年全年累计省间交易电量是多少?"
+# question = "2023年12月交易电量是多少?"
+# question = "2024年1月到3月累计交易电量是多少?"
+question = "2024年1月到2024年3月累计交易电量是多少?"
+# question = "2023年省间交易电量按交易周期划分的电量是多少?"
+# # question = "2023年省间交易电量年度交易电量是多少?"
+# # question = "今年哪个省火电送出电量最多?分别是多少?"
+# # question = "哪个省送出电量最高?是多少?"
+# # question = "省间交易正在组织的交易有多少?"
+# # question = "2024年送出电量前十名的省份是?"
+#
+result = extractor.extract(question)
+print(result)

+ 9 - 56
final/ByRules/similarity_answer_json.py

@@ -600,44 +600,21 @@ def find_key_recursively(data, target_key):
 
     _search(data)
     return results
-# query = "当月省间交易完成的交易是多少?"
-# query = "2024年1月到2月累计交易电量是多少?"
-# query = "2023年省间交易电量新能源交易电量是多少??"
-# query = "但同样阿贾克斯大口径的话我可合金外壳设计文件突然发?"
-
-
-# query = "2023年省间交易电量新能源交易电量是多少??"
-# query = "今年1月到2023年2月累计交易电量是多少?"
-# query = "2024年送出电量第二名是谁?"
-# query = "2024年7月、8月、12月交易电量的平均值是多少?"
+# # query = "当月省间交易完成的交易是多少?"
+# query = "2024年1月到2月山东省累计交易电量是多少?"
+# # query = "2023年省间交易电量新能源交易电量是多少??"
+# # query = "但同样阿贾克斯大口径的话我可合金外壳设计文件突然发?"
 #
-# json_folder = "templatesJson"
 #
+# # query = "2023年省间交易电量新能源交易电量是多少??"
+# # query = "今年1月到2023年2月累计交易电量是多少?"
+# # query = "2024年送出电量第二名是谁?"
+# # query = "2024年7月、8月、12月交易电量的平均值是多少?"
 # #
-# #
-# result = process_query(query, template_dict, json_folder)
-# #
-# print(result)
-# print(result['content'])
-# print("匹配的模板 key:", result["matched_key"])
-# print("最相似的模板句:", result["matched_template"])
-# print("相似度分数:", result["similarity_score"])
-# print("类型:", result["type"])
-# print("关键词:", result["keywords"])
-# print("查询字段:", result["target"])
-# print("模型名字", result["name"])
-# print("条件", result["conditions"])
-# print("返回的内容是:", result["content"])
-# print("问句是:", result["query"])
-# print("动作是:", result["play"])
-
-# query = "当月送出均价最高的是哪个省??"
-# query = ("交易?")
-#
 # json_folder = "templatesJson"
 #
 # result = process_query(query, template_dict, json_folder)
-
+#
 # print("匹配的模板 key:", result["matched_key"])
 # print("最相似的模板句:", result["matched_template"])
 # print("相似度分数:", result["similarity_score"])
@@ -651,28 +628,4 @@ def find_key_recursively(data, target_key):
 # print("动作是:", result["play"])
 # print("描述:", result["content"])
 
-#
-# type = result["type"]
-# content = result["content"]
-#
-# json_data_folder = "..\Json\json_data"
-# if type == "query":
-#     fileName = result["dataJsonName"]
-#     result = smart_find_value(json_data_folder, fileName,result["conditions"],result["target"] )
-#     print(result)
-# elif type == "calculate":
-#     conditions = result["conditions"]
-#     start_conditions = {('年' if 'year' in k else '月'): v for k, v in conditions.items() if k.startswith('start_')}
-#     end_conditions = {('年' if 'year' in k else '月'): v for k, v in conditions.items() if k.startswith('end_')}
-#     print(start_conditions)
-#     print(end_conditions)
-#     fileName = result["dataJsonName"] + ".json"
-#     result = calculate_sum_by_time_range(json_data_folder,fileName,result["target"],start_conditions, end_conditions)
-#     print(result)
-#
-# # 最终回答的文本
-# final_content = content.replace("?", str(result))
-# # print(f"{content}{result}")
-#
-# print(final_content)